1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-09-12 00:34:47 -04:00
elinks/src/protocol
2022-01-28 17:12:27 +01:00
..
auth [auth] cast 2022-01-26 17:21:42 +01:00
bittorrent [bittorrent] enum bittorrent_message_id -> bittorrent_message_id_T 2022-01-28 16:55:27 +01:00
file [http] cast 2022-01-26 17:35:46 +01:00
finger [c] More fixes related to redefined PF_INET 2021-12-22 16:27:29 +01:00
fsp [network] enum connection_basic_state -> connection_basic_state_T 2022-01-28 16:25:40 +01:00
ftp [ftp] enum ftp_file_type -> ftp_file_type_T 2022-01-28 16:58:58 +01:00
gemini [gemini] cast 2022-01-25 19:26:57 +01:00
gopher [gopher] enum gopher_entity -> gopher_entity_T 2022-01-28 17:02:07 +01:00
http [http] enum blacklist_flags -> blacklist_flags_T 2022-01-28 17:12:27 +01:00
nntp [nntp] enum nntp_code -> nntp_code_T 2022-01-28 17:07:51 +01:00
rewrite [char] Introduced macro C_ 2022-01-19 22:49:13 +01:00
smb [auth] cast 2022-01-26 17:21:42 +01:00
test [bfu] msgbox_flags_T 2022-01-28 16:41:23 +01:00
about.c [about] Allow change options only from about:config page 2021-12-30 14:48:14 +01:00
about.h [mozjs24] Allow build elinks with g++ 2020-10-05 20:14:55 +02:00
common.c [strchr] casting first parameter to const char * was not a good idea 2022-01-18 20:30:48 +01:00
common.h [mozjs24] Allow build elinks with g++ 2020-10-05 20:14:55 +02:00
data.c [http] cast 2022-01-26 17:35:46 +01:00
data.h [mozjs24] Allow build elinks with g++ 2020-10-05 20:14:55 +02:00
date.c [time.h] time.h can be included unconditionally 2021-03-19 14:22:04 +01:00
date.h [cflags] Removed -Wno-pointer-sign 2021-01-02 16:20:27 +01:00
header.c [strchr] casting first parameter to const char * was not a good idea 2022-01-18 20:30:48 +01:00
header.h [cflags] Removed -Wno-pointer-sign 2021-01-02 16:20:27 +01:00
Makefile [gemini] optional, not enabled by default 2021-07-02 21:28:48 +02:00
meson.build [gemini] optional, not enabled by default 2021-07-02 21:28:48 +02:00
protocol.c [char] Introduced macro C_ 2022-01-19 22:49:13 +01:00
protocol.h [gemini] gemini protocol support 2021-07-02 20:01:10 +02:00
proxy.c [strchr] casting first parameter to const char * was not a good idea 2022-01-18 20:30:48 +01:00
proxy.h [mozjs24] Allow build elinks with g++ 2020-10-05 20:14:55 +02:00
README.timegm Move README.timegm to the same directory as date.c. 2007-01-13 10:01:51 +02:00
uri.c [uri] enum uri_component -> uri_component_T 2022-01-28 15:56:59 +01:00
uri.h [uri] enum uri_component -> uri_component_T 2022-01-28 15:56:59 +01:00
user.c [char] Introduced macro C_ 2022-01-19 22:49:13 +01:00
user.h [cflags] Removed -Wno-pointer-sign 2021-01-02 16:20:27 +01:00

This file contains description of our my_timegm() function in date.c. It was
posted as a mail to links-list by Stephane Chazelas, and I thought it may be
interesting for someone, so I decided to include it in the ELinks distribution.




Un explanation for it as one (me to start with) may wonder why
this works.

We first change of calendar. To make things easy, let's say
that 0/0/0 0:0:0 in our new calendar is the Marsh 1st 1968, so
just after a february 29th as 1968 was a leap year.

if y/m/d h:min:s is time in our calendar
and
   Y/M/D h:min:s in the new calendar

M = m - 1 - 2 (+ 12 if m < 3)
Y = y - 68 (-1 if m < 3)
D = d - 1

at Y/0/0 0:0:0, there has been Y / 4 leap years in the past, so
(int) 365 * Y + Y / 4 days have past.

at Y/M/0 0:0:0, lets find how many days have past since Y/0/0:

                   |Mar                                        Feb
                  M| 0   1   2   3   4   5   6   7   8   9  10  11
-------------------+-----------------------------------------------
 days in that month|31  30  31  30  31  31  30  31  30  31  31  28 or 29
-------------------+-----------------------------------------------
  x = days at Y/M/0| 0  31  61  92 122 153 184 214 245 275 306 337
-------------------+-----------------------------------------------
first approximation|
         y = 30 * M| 0  30  60  90 120 150 180 210 240 270 300 330
-------------------+-----------------------------------------------
              x - y| 0   1   1   2   2   3   4   4   5   5   6   7
-------------------+-----------------------------------------------
(M + 4) * 3 / 5 - 2| 0   1   1   2   2   3   4   4   5   5   6   7
-------------------+-----------------------------------------------

x - y = (M + 4) * 3 / 5 - 2

x = 30 * M + (M + 4) * 3 / 5 - 2

x = (153 * M + 2) / 5

So at Y/M/D 0:0:0,

Y * 1461 / 4 + (153 * M + 2) / 5 + D days have past since
the 1st of March of 1968

1st of March of 1968 was 671 days before 1970 Jan 1st (year 0
for unix time())

So
t = s + 60 * (min + 60 * (h + 24 * (Y * 1461 / 4 + (153 * M + 2) / 5 + D - 671)))
t = s + 60 * (min + 60 * (h + 24 * (Y * 1461 / 4 + (153 * M + 2) / 5 + d - 672)))

This shouldn't work past 2100/02/28 23:59:59 as 2100 is not a leap year.

--
St<53>phane