1
0
mirror of https://github.com/rkd77/elinks.git synced 2024-12-04 14:46:47 -05:00
elinks/src/protocol
Witold Filipczyk 2828d587b2 cgi: set_nonblocking_fd
[ This is part of commit 71adb0e6cc
  from the witekfl branch.  The SMB part is in commit
  36477ffa45, and the FSP part is
  in commit 93f3dc3bbf.  --KON ]
2007-03-10 13:10:35 +02:00
..
auth Make instances of struct listbox_ops const. 2007-02-04 15:17:49 +02:00
bittorrent Bug 923: Added comments about potential time_t truncation. 2007-01-13 15:26:21 +02:00
file cgi: set_nonblocking_fd 2007-03-10 13:10:35 +02:00
finger NET: Move cache entry normalization to abort_connection 2006-02-08 21:40:08 +01:00
fsp fsp: Try to recover from ABI mismatches caused by _FILE_OFFSET_BITS. 2007-03-06 15:57:18 +02:00
ftp Bug 923: Added comments about potential time_t truncation. 2007-01-13 15:26:21 +02:00
gopher Trim trailing whitespaces. 2006-07-27 09:51:10 +02:00
http get_http_error_document: Change "happenned" to "happened". 2007-03-10 11:16:26 +02:00
nntp NNTP: Use state instead of conn->state, since it hasn't been updated yet 2006-02-08 21:04:19 +01:00
rewrite Document the syntax of protocol.rewrite.default_template. 2007-03-10 12:15:06 +02:00
smb Merge with http://elinks.cz/elinks.git 2007-03-06 16:01:21 +02:00
about.c about_protocol_handler: Don't define len if CONFIG_SMALL. 2006-12-10 17:16:38 +02:00
about.h Remove empty lines in start of header files 2005-11-15 11:33:27 +01:00
common.c fsp: used strings, encode and decode filenames with spaces. 2007-03-03 17:24:26 +02:00
common.h DIRLIST: Add helper to at start of (HTML) directory listing 2006-01-30 01:22:31 +01:00
data.c Fix data: protocol 2006-06-08 17:42:27 +00:00
data.h Remove empty lines in start of header files 2005-11-15 11:33:27 +01:00
date.c Bug 924, my_timegm: Added a comment about 2100 not being a leap year. 2007-01-13 15:38:02 +02:00
date.h Remove empty lines in start of header files 2005-11-15 11:33:27 +01:00
header.c parse_header_param: better describe behaviour when @ret is NULL 2006-06-23 06:07:22 +00:00
header.h parse_header_param stores the string via a pointer parameter. 2006-06-05 20:22:53 +00:00
Makefile DIRLIST: Add helper to at start of (HTML) directory listing 2006-01-30 01:22:31 +01:00
protocol.c Modularise HTTP authentication 2006-05-20 15:01:23 +00:00
protocol.h - FSP protocol 2006-01-16 11:40:13 +01:00
proxy.c Use enum connection_state 2006-01-28 20:21:09 +00:00
proxy.h enum connection_state instead of int to satisfy tcc 2006-04-05 16:27:16 +02:00
README.timegm Move README.timegm to the same directory as date.c. 2007-01-13 10:01:51 +02:00
uri.c encode_uri_string: Let name point to const. 2007-03-05 19:59:17 +02:00
uri.h encode_uri_string: Let name point to const. 2007-03-05 19:59:17 +02:00
user.c If there is nothing to write do not even open the file for write (test 2007-03-05 21:37:24 +01:00
user.h Remove empty lines in start of header files 2005-11-15 11:33: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