You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by br...@hyperreal.org on 1998/05/06 04:30:00 UTC

cvs commit: apache-1.3/src/main util.c

brian       98/05/05 19:29:59

  Modified:    src      CHANGES
  Log:
  PR: 754
  Submitted by:	Paul Eggert <eg...@twinsun.com>
  
  Fix handling of %Z in timefmt strings for those platforms with no time
  zone information in their tm struct. [
  
  Revision  Changes    Path
  1.821     +4 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.820
  retrieving revision 1.821
  diff -u -r1.820 -r1.821
  --- CHANGES	1998/05/06 01:19:11	1.820
  +++ CHANGES	1998/05/06 02:29:46	1.821
  @@ -1,5 +1,9 @@
   Changes with Apache 1.3b7
   
  +  *) Fix handling of %Z in timefmt strings for those platforms with no time
  +     zone information in their tm struct. [Paul Eggert <eg...@twinsun.com>]
  +     PR #754
  +
     *) Makes mod_rewrite, mod_log_config, mod_status and the ServerSignature 
        feature compatible with 'UseCanonicalName off' by changing  
        r->server->server_hostname to ap_get_server_name().  And I changed some 
  
  
  

  Modified:    src/main util.c
  Log:
  PR: 754
  Submitted by:	Paul Eggert <eg...@twinsun.com>
  
  Fix handling of %Z in timefmt strings for those platforms with no time
  zone information in their tm struct.
  
  Revision  Changes    Path
  1.113     +34 -0     apache-1.3/src/main/util.c
  
  Index: util.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/main/util.c,v
  retrieving revision 1.112
  retrieving revision 1.113
  diff -u -r1.112 -r1.113
  --- util.c	1998/04/13 18:05:12	1.112
  +++ util.c	1998/05/06 02:29:59	1.113
  @@ -122,9 +122,43 @@
   API_EXPORT(char *) ap_ht_time(pool *p, time_t t, const char *fmt, int gmt)
   {
       char ts[MAX_STRING_LEN];
  +    char tf[MAX_STRING_LEN];
       struct tm *tms;
   
       tms = (gmt ? gmtime(&t) : localtime(&t));
  +    if(gmt) {
  +      /* Convert %Z to "GMT" and %z to "+0000";
  +       * on hosts that do not have a time zone string in struct tm,
  +       * strftime must assume its argument is local time.
  +       */
  +      const char *f;
  +      char *p;
  +      for(p = tf, f = fmt; p < tf + sizeof tf - 5 && (*p = *f); f++, p++) {
  +	if(*f == '%')
  +	  switch(f[1])
  +	    {
  +	    case '%':
  +	      *++p = *++f;
  +	      break;
  +	    case 'Z':
  +	      *p++ = 'G';
  +	      *p++ = 'M';
  +	      *p = 'T';
  +	      f++;
  +	      break;
  +	    case 'z': /* common extension */
  +	      *p++ = '+';
  +	      *p++ = '0';
  +	      *p++ = '0';
  +	      *p++ = '0';
  +	      *p = '0';
  +	      f++;
  +	      break;
  +	    }
  +      }
  +      *p = '\0';
  +      fmt = tf;
  +    }
   
       /* check return code? */
       strftime(ts, MAX_STRING_LEN, fmt, tms);