mcgrath%tully.Berkeley.EDU@GINGER.BERKELEY.EDU (Roland McGrath) (05/14/89)
The following input produces bad code; the `fintrz' insn is not emitted at
all. It produces different, but equally bad, code with -O and without.
If the sequence `"f" "intrz" "%.x %1, %0"' is amalgomated into one string
`"fintrz%.x %1, %0"', or if `foo' is made non-`static', the problem goes away.
static inline double
foo(double value, double *iptr)
{
double ipart;
asm("f" "intrz" "%.x %1, %0" : "=f" (ipart) : "f" (value));
*iptr = ipart;
return(value - ipart);
}
double
bar(double value, double *iptr)
{
return foo(value, iptr);
}mcgrath%paris.Berkeley.EDU@GINGER.BERKELEY.EDU (Roland McGrath) (05/25/89)
GCC 1.35, Sun 3 (68020), Sun Unix 3.5.
% cc1 -O strftime.i
isalnum isalpha iscntrl isdigit islower isgraph isprint ispunct isspace isupper isxdigit tolower toupper isascii isascii
../ctype.h:42: redefinition of `isascii'
../ctype.h:39: here is the previous declaration of `isascii'
__huge_val strftimeSegmentation fault (core dumped)
strftime.i:
# 1 "strftime.c"
# 1 "../ansidecl.h"
# 90 "../ansidecl.h"
# 18 "strftime.c"
# 1 "../localeinfo.h"
# 1 "../stddef.h"
typedef long int ptrdiff_t;
typedef unsigned int size_t;
typedef unsigned char wchar_t;
# 25 "../localeinfo.h"
# 1 "../limits.h"
# 1 "../__posix_limits.h"
# 29 "../limits.h"
# 28 "../localeinfo.h"
typedef struct
{
const char * const string;
const size_t len;
const int shift;
} mb_char;
struct ctype_info
{
const unsigned char * const ctype_b;
const unsigned char * const ctype_tolower;
const unsigned char * const ctype_toupper;
const mb_char * const mb_chars;
const size_t maxlen;
};
extern size_t __mb_max;
extern const unsigned char *__ctype_b;
extern const unsigned char *__ctype_tolower;
extern const unsigned char *__ctype_toupper;
struct collate_info
{
const unsigned char * const table;
};
struct numeric_info
{
const char * const decimal_point;
const char * const thousands_sep;
const char * const grouping;
};
struct monetary_info
{
const char * const int_curr_symbol;
const char * const currency_symbol;
const char * const mon_decimal_point;
const char * const mon_thousands_sep;
const char * const mon_grouping;
const char * const positive_sign;
const char * const negative_sign;
const char int_frac_digits;
const char frac_digits;
const char p_cs_precedes;
const char p_sep_by_space;
const char n_cs_precedes;
const char n_sep_by_space;
const char p_sign_posn;
const char n_sign_posn;
};
struct time_info
{
const char * const abbrev_wkday[7];
const char * const full_wkday[7];
const char * const abbrev_month[12];
const char * const full_month[12];
const char * const ampm[2];
const char * const ut0;
const char * const tz;
};
typedef struct
{
const char *name;
int categories;
const struct ctype_info *ctype;
const struct time_info *time;
const struct collate_info *collate;
const struct numeric_info *numeric;
const struct monetary_info *monetary;
} locale;
extern locale _current;
extern const locale * const _locales[];
# 19 "strftime.c"
# 1 "../ctype.h"
enum
{
_ISupper = 1 << 0,
_ISlower = 1 << 1,
_IScntrl = 1 << 2,
_ISdigit = 1 << 3,
_ISspace = 1 << 4,
_IShex = 1 << 5,
_ISpunct = 1 << 6,
_NOgraph = 1 << 7,
_ISalpha = _ISupper | _ISlower,
_ISalnum = _ISalpha | _ISdigit,
_ISxdigit = _ISdigit | _IShex,
_ISgraph = _ISalnum | _ISpunct,
_ISprint = _ISgraph | _NOgraph
};
extern const unsigned char *__ctype_b;
extern const unsigned char *__ctype_tolower;
extern const unsigned char *__ctype_toupper;
static __inline int isalnum( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISalnum)) ) ; } ;
static __inline int isalpha( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISalpha)) ) ; } ;
static __inline int iscntrl( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _IScntrl)) ) ; } ;
static __inline int isdigit( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISdigit)) ) ; } ;
static __inline int islower( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISlower)) ) ; } ;
static __inline int isgraph( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISgraph)) ) ; } ;
static __inline int isprint( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISprint)) ) ; } ;
static __inline int ispunct( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISpunct)) ) ; } ;
static __inline int isspace( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISspace)) ) ; } ;
static __inline int isupper( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISupper)) ) ; } ;
static __inline int isxdigit( int __c) { return (__ctype_b[ ((unsigned char) (__c)) ] & ((unsigned char) ( _ISxdigit)) ) ; } ;
static __inline int
tolower( int __c)
{ return __ctype_tolower[ ((unsigned char) (__c)) ]; }
static __inline int
toupper( int __c)
{ return __ctype_toupper[ ((unsigned char) (__c)) ]; }
static __inline int
isascii( int __c)
{ return ( ((unsigned char) (__c)) & (1 << 7)) == 0; }
static __inline int
isascii( int __c)
{ return( ((unsigned char) (__c)) & 0x7f); }
# 151 "../ctype.h"
# 20 "strftime.c"
# 1 "../limits.h"
# 80 "../limits.h"
# 21 "strftime.c"
# 1 "../stddef.h"
# 101 "../stddef.h"
# 22 "strftime.c"
# 1 "../stdio.h"
# 1 "../stddef.h"
# 101 "../stddef.h"
# 28 "../stdio.h"
# 1 "../stdarg.h"
# 49 "../stdarg.h"
typedef char *__va_list;
# 80 "../stdarg.h"
# 31 "../stdio.h"
typedef struct __stdio_file FILE;
typedef enum { __READING, __WRITING, __CHANGING } __io_direction;
typedef struct
{
unsigned int __read:1;
unsigned int __write:1;
unsigned int __append:1;
unsigned int __binary:1;
unsigned int __create:1;
unsigned int __exclusive:1;
unsigned int __truncate:1;
} __io_mode;
typedef int __io_read ( void * __cookie, char *__buf, size_t __nbytes) ;
typedef int __io_write ( void * __cookie, const char *__buf, size_t __n) ;
typedef long int __io_seek ( void * __cookie, long int __off, int __w) ;
typedef int __io_close ( void * __cookie) ;
typedef struct
{
__io_read *__read;
__io_write *__write;
__io_seek *__seek;
__io_close *__close;
} __io_functions;
typedef struct
{
int (*__input) (FILE *stream) ;
void (*__output) (FILE *stream, int flush_only, int c) ;
} __room_functions;
extern const __io_functions __default_io_functions;
extern const __room_functions __default_room_functions;
extern __io_close __stdio_close;
extern void * __stdio_open ( const char *__file, __io_mode __m, int *__dp) ;
extern void __stdio_linebf ( void * __cookie, int *__buffering,
size_t *__bufsize, __io_functions *__iof,
__room_functions *__rf) ;
extern void __stdio_errmsg ( const char *__msg, size_t __len) ;
extern char * __stdio_gen_tempname ( const char *__dir, const char *__pfx,
int __dir_search, size_t *__lenptr) ;
extern volatile void __libc_fatal ( const char *__message) ;
struct __stdio_file
{
FILE *__next;
char *__buf;
char *__bufp;
char *__endp;
size_t __bufsz;
void * __cookie;
int __fd;
unsigned char __magic;
char __pb_buf[3];
size_t __pb_count;
__io_mode __mode;
unsigned int __eof:1;
unsigned int __error:1;
unsigned int __userbuf:1;
unsigned int __linebuf:1;
unsigned int __seen:1;
unsigned int __didnl:1;
unsigned int __ispipe:1;
__io_direction __direction;
__io_functions __io_funcs;
__room_functions __room_funcs;
};
extern volatile void __stdio_ill_dirch (__io_direction __dir) ;
# 170 "../stdio.h"
extern void __invalidate (FILE *__stream) ;
typedef long int fpos_t;
extern FILE *__stdio_head;
extern FILE *__stdio_tail;
extern FILE __stdio_files[3];
extern FILE * const stdin, * const stdout, * const stderr;
extern int remove ( const char *__filename) ;
extern int rename ( const char *__old, const char *__new) ;
extern FILE * tmpfile ( void ) ;
extern char * tmpnam (char *__s) ;
extern char * tempnam ( const char *__dir, const char *__pfx) ;
extern int __flshfp (FILE *__stream, unsigned char __c,
int __flush_only) ;
extern int fclose (FILE *__stream) ;
extern int fflush (FILE *__stream) ;
extern FILE * fopen ( const char *__filename, const char *__mode) ;
extern FILE* freopen ( const char *__filename,
const char *__mode, FILE *__stream) ;
extern FILE * __fopencookie ( void * __cookie, __io_mode mode,
__io_functions __io_functions) ;
extern FILE * fdopen (int __fd, const char *__mode) ;
extern FILE * fopencookie ( void * __cookie, const char *__mode,
__io_functions __io_functions) ;
extern FILE * fopenstring (char *__s, size_t __len,
const char *__mode) ;
extern FILE * freplace (FILE *__replace, FILE *__with) ;
extern void setbuf (FILE *__stream, char *__buf) ;
extern int setvbuf (FILE *__stream, char *__buf,
int __mode, size_t __n) ;
extern void setbuffer (FILE *__stream, char *__buf, size_t __size) ;
extern void setlinebuf (FILE *__stream) ;
extern int fprintf (FILE *__stream, const char *__format, ...) ;
extern int printf ( const char *__format, ...) ;
extern int sprintf (char *__s, const char *__format, ...) ;
extern int vfprintf (FILE *__s, const char *__format, __va_list __arg) ;
extern int vprintf ( const char *__format, __va_list __arg) ;
extern int vsprintf (char *__s, const char *__format, __va_list __arg) ;
extern int __vflprintf (FILE *__s, const char *__format,
__va_list __arg, int __limit, size_t __max) ;
extern int snprintf (char *__s, size_t __maxlen,
const char *__format, ...) ;
extern int vsnprintf (char *__s, size_t __maxlen,
const char *__format, __va_list __arg) ;
extern int vflprintf (FILE *__s, size_t __n,
const char *__format, __va_list __arg) ;
extern int vslprintf (char *__s, size_t __n,
const char *__format, __va_list __arg) ;
extern int vslnprintf (char *__s, size_t __n, size_t __maxlen,
const char *__format, __va_list __arg) ;
extern int fscanf (FILE *__stream, const char *__format, ...) ;
extern int scanf ( const char *__format, ...) ;
extern int sscanf ( const char *__s, const char *__format, ...) ;
extern int __vfscanf (FILE *__s, const char *__format,
__va_list __arg, int __allocate) ;
extern int vfscanf (FILE *__s, const char *__format,
__va_list __arg) ;
extern int vscanf ( const char *__format, __va_list __arg) ;
extern int __vsscanf ( const char *__s, const char *__format,
__va_list __arg) ;
extern int vsscanf ( const char *__s, const char *__format,
__va_list __arg) ;
extern int vfscanf_malloc (FILE *__s, const char *__format,
__va_list __arg) ;
extern int fscanf_malloc (FILE *__stream, const char *__format, ...) ;
extern int __fillbf (FILE *__stream) ;
extern int fgetc (FILE *__stream) ;
extern int getc (FILE *__stream) ;
extern int getchar ( void ) ;
extern int fputc (int __c, FILE *__stream) ;
extern int putc (int __c, FILE *__stream) ;
extern int putchar (int __c) ;
extern int getw (FILE *__stream) ;
extern int putw (int __w, FILE *__stream) ;
extern char * fgets (char *__s, size_t __n, FILE *__stream) ;
extern char * gets (char *__s) ;
extern int fputs ( const char *__s, FILE *__stream) ;
extern int puts ( const char *__s) ;
extern int ungetc (int __c, FILE *__stream) ;
extern size_t fread ( void * __ptr, size_t __size,
size_t __n, FILE *__stream) ;
extern size_t fwrite ( const void * __ptr, size_t __size,
size_t __n, FILE *__s) ;
extern int fgetpos (FILE *__stream, fpos_t *__pos) ;
extern int fsetpos (FILE *__stream, const fpos_t *__pos) ;
extern int fseek (FILE *__stream, long int __offset, int __whence) ;
extern long int ftell (FILE *__stream) ;
extern void rewind (FILE *__stream) ;
extern void clearerr (FILE *__stream) ;
extern int feof (FILE *__stream) ;
extern int ferror (FILE *__stream) ;
extern void perror ( const char *__s) ;
extern void psignal ( const char *__s, int __sig) ;
extern int fileno (FILE *__stream) ;
extern FILE * popen ( const char *__command, const char *__mode) ;
extern int pclose (FILE *__stream) ;
extern char * ctermid (char *__s) ;
extern char * cuserid (char *__s) ;
# 23 "strftime.c"
# 1 "../stdlib.h"
# 1 "../stddef.h"
# 101 "../stddef.h"
# 31 "../stdlib.h"
# 1 "../errno.h"
# 1 "/usr/include/errno.h"
# 1 "/usr/include/sys/errno.h"
# 7 "/usr/include/errno.h"
extern int errno;
# 28 "../errno.h"
extern volatile int errno;
# 34 "../stdlib.h"
# 1 "../float.h"
# 1 "../__fl_68881.h"
# 88 "../__fl_68881.h"
static __inline const double
__huge_val( void )
{
register double __val;
__asm("fmove%.d #0x7ff0000000000000, %0" : "=f" (__val));
return(__val);
}
# 63 "../float.h"
# 38 "../stdlib.h"
typedef struct
{
int quot;
int rem;
} div_t;
typedef struct
{
long int quot;
long int rem;
} ldiv_t;
extern size_t __mb_max;
extern double atof ( const char *__nptr) ;
extern int atoi ( const char *__nptr) ;
extern long int atol ( const char *__nptr) ;
extern double strtod ( const char *__nptr, char **__endptr) ;
extern long int strtol ( const char *__nptr, char **__endptr,
int __base) ;
extern unsigned long int strtoul ( const char *__nptr,
char **__endptr, int __base) ;
extern int rand ( void ) ;
extern void srand (unsigned int __seed) ;
extern long int __random ( void ) ;
extern void __srandom (unsigned int __seed) ;
extern void * __initstate (unsigned int __seed, void * __statebuf,
size_t __statelen) ;
extern void * __setstate ( void * __statebuf) ;
extern long int random ( void ) ;
extern void srandom (unsigned int __seed) ;
extern void * initstate (unsigned int __seed, void * __statebuf,
size_t __statelen) ;
extern void * setstate ( void * __statebuf) ;
extern void * malloc (size_t __size) ;
extern void * realloc ( void * __ptr, size_t __size) ;
extern void * calloc (size_t __nmemb, size_t __size) ;
extern void free ( void * __ptr) ;
extern void cfree ( void * __ptr) ;
extern void * __alloca (size_t __size) ;
extern void * alloca (size_t __size) ;
# 170 "../stdlib.h"
extern void * memalign (size_t __alignment, size_t __size) ;
extern void * valloc (size_t __size) ;
extern volatile void abort ( void ) ;
extern int atexit (void (*__func)( void )) ;
extern int on_exit (void (*__func)(int __status, void * __arg),
void * __arg) ;
extern volatile void exit (int __status) ;
extern char * getenv ( const char *__name) ;
extern int putenv ( const char *__string) ;
extern int system ( const char *__command) ;
extern void * bsearch ( const void * __key, const void * __base,
size_t __nmemb, size_t __size,
int (*__compar)( const void * , const void * )) ;
extern void qsort ( void * __base, size_t __nmemb, size_t __size,
int (*__compar)( const void * , const void * )) ;
extern const int abs (int __x) ;
extern const long int labs (long int __x) ;
extern const div_t div (int __numer, int __denom) ;
extern const ldiv_t ldiv (long int __numer, long int __denom) ;
extern int mblen ( const char *__s, size_t __n) ;
extern int mbtowc (wchar_t *__pwc, const char *__s, size_t __n) ;
extern int wctomb (char *__s, wchar_t __wchar) ;
extern size_t mbstowcs (wchar_t *__pwcs, const char *__s, size_t __n) ;
extern size_t wcstombs (char *__s, const wchar_t *__pwcs, size_t __n) ;
extern int getopt (int __argc, const char **__argv,
const char *__opts) ;
extern int opterr;
extern int optind;
extern char *optarg;
# 24 "strftime.c"
# 1 "../string.h"
# 1 "../stddef.h"
# 101 "../stddef.h"
# 29 "../string.h"
extern void * memcpy ( void * __dest, const void * __src, size_t __n) ;
extern void * memmove ( void * __dest, const void * __src, size_t __n) ;
extern void * memccpy ( void * __dest, const void * __src,
int __c, size_t __n) ;
extern void * memset ( void * __s, int __c, size_t __n) ;
extern int memcmp ( const void * __s1, const void * __s2, size_t __n) ;
extern void * memchr ( const void * __s, int __c, size_t __n) ;
extern char * strcpy (char *__dest, const char *__src) ;
extern char * strncpy (char *__dest, const char *__src, size_t __n) ;
extern char * strcat (char *__src, const char *__dest) ;
extern char * strncat (char *__dest, const char *__src, size_t __n) ;
extern int strcmp ( const char *__s1, const char *__s2) ;
extern int strncmp ( const char *__s1, const char *__s2, size_t __n) ;
extern int strcoll ( const char *__s1, const char *__s2) ;
extern size_t strxfrm (char *__dest, const char *__src, size_t __n) ;
extern char * strdup ( const char *__s) ;
extern char * strchr ( const char *__s, int __c) ;
extern char * strrchr ( const char *__s, int __c) ;
extern size_t strcspn ( const char *__s, const char *__reject) ;
extern size_t strspn ( const char *__s, const char *__accept) ;
extern char * strpbrk ( const char *__s, const char *__accept) ;
extern char * strstr ( const char *__needle, const char *__haystack) ;
extern char * strtok (char *__s, const char *__delim) ;
extern size_t strlen ( const char *__s) ;
extern char * strerror (int __errnum) ;
extern char * strsignal (int __sig) ;
# 25 "strftime.c"
# 1 "./time.h"
# 1 "../stddef.h"
# 101 "../stddef.h"
# 32 "./time.h"
typedef long int clock_t;
typedef long int time_t;
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
extern clock_t clock ( void ) ;
extern time_t time (time_t *__timer) ;
extern const double difftime (time_t __time1, time_t __time0) ;
extern time_t mktime (struct tm *__tp) ;
extern size_t strftime (char *__s, size_t __maxsize,
const char *__format, const struct tm *__tp) ;
extern struct tm * gmtime ( const time_t *__timer) ;
extern struct tm * localtime ( const time_t *__timer) ;
extern struct tm * __offtime ( const time_t *__timer, long int __offset) ;
# 131 "./time.h"
extern char * asctime ( const struct tm *__tp) ;
extern char * ctime ( const time_t *__timer) ;
# 151 "./time.h"
extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;
extern void __tzset ( void ) ;
extern char *tzname[2];
extern int daylight;
extern long int timezone;
extern void tzset ( void ) ;
# 26 "strftime.c"
# 41 "strftime.c"
size_t
strftime(
char *s , size_t maxsize ,
const char *format , register const struct tm *tp)
{
const char * const a_wkday = _current.time ->abbrev_wkday[tp->tm_wday];
const char * const f_wkday = _current.time ->full_wkday[tp->tm_wday];
const char * const a_month = _current.time ->abbrev_month[tp->tm_mon];
const char * const f_month = _current.time ->full_month[tp->tm_mon];
size_t aw_len = strlen(a_wkday);
size_t am_len = strlen(a_month);
size_t wkday_len = strlen(f_wkday);
size_t month_len = strlen(f_month);
int hour12 = tp->tm_hour;
const char * const ampm = _current.time ->ampm[hour12 > 12];
size_t ap_len = strlen(ampm);
unsigned int y_week0, y_week1;
const char *zone;
size_t zonelen;
register size_t i = 0;
register char *p = s;
register const char *f;
__tzset();
if (tp->tm_isdst < 0)
{
zone = "";
zonelen = 0;
}
else
{
zone = __tzname[tp->tm_isdst > 0];
zonelen = strlen(zone);
}
if (hour12 > 12)
hour12 -= 12;
else
if (hour12 == 0) hour12 = 12;
y_week0 = y_week1 = 0;
for (f = format; *f != '\0'; ++f)
{
if (!isascii(*f))
{
int len = mblen(f, strlen(f));
if (len > 0)
{
do { i += ((len)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { memcpy(( void * ) p, ( void * ) ( f), (len)); p += ((len)); } } while (0) ;
continue;
}
}
if (*f != '%')
{
do { i += (1); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { *p = *f; p += (1); } } while (0) ;
continue;
}
++f;
switch (*f)
{
case '%':
do { i += (1); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { *p = *f; p += (1); } } while (0) ;
break;
case 'a':
do { i += ((aw_len)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { memcpy(( void * ) p, ( void * ) ( a_wkday), (aw_len)); p += ((aw_len)); } } while (0) ;
break;
case 'A':
do { i += ((wkday_len)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { memcpy(( void * ) p, ( void * ) ( f_wkday), (wkday_len)); p += ((wkday_len)); } } while (0) ;
break;
case 'b':
do { i += ((am_len)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { memcpy(( void * ) p, ( void * ) ( a_month), (am_len)); p += ((am_len)); } } while (0) ;
break;
case 'B':
do { i += ((month_len)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { memcpy(( void * ) p, ( void * ) ( f_month), (month_len)); p += ((month_len)); } } while (0) ;
break;
case 'c':
do { i += ((25)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.3s %.3s %2d %.2d:%.2d:%.2d %d",
a_wkday, a_month, tp->tm_mday,
tp->tm_hour, tp->tm_min,
tp->tm_sec, 1900 + tp->tm_year) != (25)) return(0); p += ((25)); } } while (0) ;
break;
case 'd':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", tp->tm_mday) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'H':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", tp->tm_hour) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'I':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", hour12) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'j':
do { i += ((3)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.3d", tp->tm_yday) != (3)) return(0); p += ((3)); } } while (0) ;
break;
case 'm':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", tp->tm_mon + 1) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'M':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", tp->tm_min) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'p':
do { i += ((ap_len)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { memcpy(( void * ) p, ( void * ) ( ampm), (ap_len)); p += ((ap_len)); } } while (0) ;
break;
case 'S':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", tp->tm_sec) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'U':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2u", y_week0) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'w':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", tp->tm_wday) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'W':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2u", y_week1) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'x':
do { i += ((15)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.3s %.3s %2d %d",
a_wkday, a_month, tp->tm_mday, 1900 + tp->tm_sec) != (15)) return(0); p += ((15)); } } while (0) ;
break;
case 'X':
do { i += ((8)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d:%.2d:%.2d", tp->tm_hour, tp->tm_min, tp->tm_sec) != (8)) return(0); p += ((8)); } } while (0) ;
break;
case 'y':
do { i += ((2)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.2d", tp->tm_year) != (2)) return(0); p += ((2)); } } while (0) ;
break;
case 'Y':
do { i += ((4)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { if (sprintf (p, "%.4d", 1900 + tp->tm_year) != (4)) return(0); p += ((4)); } } while (0) ;
break;
case 'Z':
do { i += ((zonelen)); if (i >= maxsize) return(0); else if (p != ((void *) 0) ) { memcpy(( void * ) p, ( void * ) ( zone), (zonelen)); p += ((zonelen)); } } while (0) ;
break;
default:
break;
}
}
if (p != ((void *) 0) )
*p = '\0';
return(i);
}