manoj       98/11/05 11:20:18

  Modified:    src      CHANGES
               src/include ap_config.h
               src/os/win32 os.h util_win32.c
  Log:
  Work around incomplete implementation of strftime on Win32.
  
  Revision  Changes    Path
  1.1134    +3 -0      apache-1.3/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/CHANGES,v
  retrieving revision 1.1133
  retrieving revision 1.1134
  diff -u -u -r1.1133 -r1.1134
  --- CHANGES   1998/11/04 22:23:42     1.1133
  +++ CHANGES   1998/11/05 19:20:14     1.1134
  @@ -1,5 +1,8 @@
   Changes with Apache 1.3.4
   
  +  *) Work around incomplete implementation of strftime on Win32.
  +     [Manoj Kasichainula, Ken Parzygnat <[EMAIL PROTECTED]>]
  +
     *) Move a typedef to fix compile problems on Linux with 1.x kernels.
        [Manoj Kasichainula] PR#3177
   
  
  
  
  1.243     +3 -0      apache-1.3/src/include/ap_config.h
  
  Index: ap_config.h
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/include/ap_config.h,v
  retrieving revision 1.242
  retrieving revision 1.243
  diff -u -u -r1.242 -r1.243
  --- ap_config.h       1998/11/04 22:23:45     1.242
  +++ ap_config.h       1998/11/05 19:20:16     1.243
  @@ -938,6 +938,9 @@
   #endif /* ndef WIN32 */
   
   #include <time.h>            /* for ctime */
  +#ifdef WIN32
  +#define strftime(s,max,format,tm)  os_strftime(s,max,format,tm)
  +#endif
   #include <signal.h>
   #include <errno.h>
   #if !defined(QNX) && !defined(CONVEXOS11) && !defined(NEXT)
  
  
  
  1.25      +2 -0      apache-1.3/src/os/win32/os.h
  
  Index: os.h
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/os/win32/os.h,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -u -r1.24 -r1.25
  --- os.h      1998/09/19 12:27:25     1.24
  +++ os.h      1998/11/05 19:20:17     1.25
  @@ -93,6 +93,8 @@
   #define stat(f,ps)  os_stat(f,ps)
   API_EXPORT(int) os_stat(const char *szPath,struct stat *pStat);
   
  +API_EXPORT(int) os_strftime(char *s, size_t max, const char *format, const 
struct tm *tm);
  +
   #define _spawnv(mode,cmdname,argv)       os_spawnv(mode,cmdname,argv)
   #define spawnv(mode,cmdname,argv)        os_spawnv(mode,cmdname,argv)
   API_EXPORT(int) os_spawnv(int mode,const char *cmdname,const char *const 
*argv);
  
  
  
  1.27      +69 -0     apache-1.3/src/os/win32/util_win32.c
  
  Index: util_win32.c
  ===================================================================
  RCS file: /export/home/cvs/apache-1.3/src/os/win32/util_win32.c,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -u -r1.26 -r1.27
  --- util_win32.c      1998/10/01 04:52:32     1.26
  +++ util_win32.c      1998/11/05 19:20:17     1.27
  @@ -1,6 +1,8 @@
   #include <windows.h>
   #include <sys/stat.h>
   #include <stdarg.h>
  +#include <time.h>
  +#include <stdlib.h>
   
   #include "httpd.h"
   #include "http_log.h"
  @@ -415,4 +417,71 @@
       va_end(vlist);
       
       return _spawnve(mode, szCmd, aszArgs, aszEnv);
  +}
  +
  +#undef strftime
  +
  +/* Partial replacement for strftime. This adds certain expandos to the
  + * Windows version
  + */
  +
  +API_EXPORT(int) os_strftime(char *s, size_t max, const char *format,
  +                            const struct tm *tm) {
  +   /* If the new format string is bigger than max, the result string probably
  +    * won't fit anyway. When %-expandos are added, made sure the padding 
below
  +    * is enough.
  +    */
  +    char *new_format = (char *) _alloca(max + 11);
  +    size_t i, j, format_length = strlen(format);
  +    int return_value;
  +    int length_written;
  +
  +    for (i = 0, j = 0; (i < format_length && j < max)) {
  +        if (format[i] != '%') {
  +            new_format[j++] = format[i++];
  +            continue;
  +        }
  +        switch (format[i+1]) {
  +            case 'D':
  +                /* Is this locale dependent? Shouldn't be...
  +                   Also note the year 2000 exposure here */
  +                memcpy(new_format + j, "%m/%d/%y", 8);
  +                i += 2;
  +                j += 8;
  +                break;
  +            case 'r':
  +                memcpy(new_format + j, "%I:%M:%S %p", 11);
  +                i += 2;
  +                j += 11;
  +                break;
  +            case 'T':
  +                memcpy(new_format + j, "%H:%M:%S", 8);
  +                i += 2;
  +                j += 8;
  +                break;
  +            case 'e':
  +                length_written = ap_snprintf(new_format + j, max - j, "%2d",
  +                    tm->tm_mday);
  +                j = (length_written == -1) ? max : (j + length_written);
  +                i += 2;
  +                break;
  +            /* Handle "%%" to avoid dying on strftime(out, 600, 1200 "%"'s) 
*/
  +            case '%':
  +                new_format[j++] = '%';
  +                i += 2;
  +                break;
  +            default:
  +                /* We know we can advance two characters forward here. */
  +                new_format[j++] = format[i++];
  +                new_format[j++] = format[i++];
  +        }
  +    }
  +    if (j >= max) {
  +        *s = '\0';  /* Defensive programming, okay since output is undefined 
*/
  +        return_value = 0;
  +    } else {
  +        new_format[j] = '\0';
  +        return_value = strftime(s, max, new_format, tm);
  +    }
  +    return return_value;
   }
  
  
  

Reply via email to