diff options
| author | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-12-27 15:53:03 +0000 | 
|---|---|---|
| committer | Fumitoshi UKAI <ukai@debian.or.jp> | 2002-12-27 15:53:03 +0000 | 
| commit | ede9936f504281c9d41f25868dca540f8dae704e (patch) | |
| tree | c9015f1197ae163d4659b1dd65f166d55d58eed7 | |
| parent | [w3m-dev 03606] Re: clean up displayBuffer() (diff) | |
| download | w3m-ede9936f504281c9d41f25868dca540f8dae704e.tar.gz w3m-ede9936f504281c9d41f25868dca540f8dae704e.zip | |
[w3m-dev 03607] mymktime: time zone support
* etc.c (get_zone): added
	(mymktime): parse timezone
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
| -rw-r--r-- | ChangeLog | 8 | ||||
| -rw-r--r-- | etc.c | 44 | 
2 files changed, 45 insertions, 7 deletions
| @@ -1,5 +1,11 @@  2002-12-28  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +	* [w3m-dev 03607] mymktime: time zone support +	* etc.c (get_zone): added +		(mymktime): parse timezone + +2002-12-28  Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp> +  	* [w3m-dev 03606] Re: clean up displayBuffer()  	* main.c (followA): B_FORCE_REDRAW  		(follow_map): ditto @@ -6097,4 +6103,4 @@ a	* [w3m-dev 03276] compile error on EWS4800  	* release-0-2-1  	* import w3m-0.2.1 -$Id: ChangeLog,v 1.650 2002/12/27 15:50:32 ukai Exp $ +$Id: ChangeLog,v 1.651 2002/12/27 15:53:03 ukai Exp $ @@ -1,4 +1,4 @@ -/* $Id: etc.c,v 1.44 2002/12/24 17:20:46 ukai Exp $ */ +/* $Id: etc.c,v 1.45 2002/12/27 15:53:04 ukai Exp $ */  #include "fm.h"  #include <pwd.h>  #include "myctype.h" @@ -1646,12 +1646,38 @@ get_time(char **s, int *hour, int *min, int *sec)      return 0;  } +static int +get_zone(char **s, int *z_hour, int *z_min) +{ +    Str tmp = Strnew(); +    int zone; +    char *ss = *s; + +    if (!**s) +	return -1; + +    if (**s == '+' || **s == '-') +	Strcat_char(tmp, *((*s)++)); +    while (**s && IS_DIGIT(**s)) +	Strcat_char(tmp, *((*s)++)); +    if (!(tmp->length == 4 && IS_DIGIT(*ss)) && +	!(tmp->length == 5 && (*ss == '+' || *ss == '-'))) { +	*s = ss; +	return -1; +    } + +    zone = atoi(tmp->ptr); +    *z_hour = zone / 100; +    *z_min = zone - (zone / 100) * 100; +    return 0; +} +  /* RFC 1123 or RFC 850 or ANSI C asctime() format string -> time_t */  time_t  mymktime(char *timestr)  {      char *s; -    int day, mon, year, hour, min, sec; +    int day, mon, year, hour, min, sec, z_hour = 0, z_min = 0;      if (!(timestr && *timestr))  	return -1; @@ -1688,8 +1714,12 @@ mymktime(char *timestr)  	    min = 0;  	    sec = 0;  	} -	else if (get_time(&s, &hour, &min, &sec) == -1) { -	    return -1; +	else { +	    if (get_time(&s, &hour, &min, &sec) == -1) +		return -1; +	    while (*s && !IS_DIGIT(*s) && *s != '+' && *s != '-') +		s++; +	    get_zone(&s, &z_hour, &z_min);  	}      }      else { @@ -1715,8 +1745,8 @@ mymktime(char *timestr)  	    return -1;      }  #ifdef DEBUG -    fprintf(stderr, "year=%d month=%d day=%d hour:min:sec=%d:%d:%d\n", -	    year, mon, day, hour, min, sec); +    fprintf(stderr, "year=%d month=%d day=%d hour:min:sec=%d:%d:%d zone=%d:%d\n", +	    year, mon, day, hour, min, sec, z_hour, z_min);  #endif				/* DEBUG */      mon -= 3; @@ -1726,6 +1756,8 @@ mymktime(char *timestr)      }      day += (year - 1968) * 1461 / 4;      day += ((((mon * 153) + 2) / 5) - 672); +    hour -= z_hour; +    min -= z_min;      return (time_t) ((day * 60 * 60 * 24) +  		     (hour * 60 * 60) + (min * 60) + sec);  } | 
