6 static const char *monthAbbr[]={
7 "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
8 size_t strftime(char *s,size_t max, const char *format,
11 while(j<max && format[i]) {
18 case '%': s[j++]='%';break;
19 case 'm': if ((j+2) >=max) return 0;
20 j+=sprintf(s+j,"%02d",tm->tm_mon+1);
22 case 'd': if ((j+2) >=max) return 0;
23 j+=sprintf(s+j,"%02d",tm->tm_mday);
25 case 'y': if ((j+2) >=max) return 0;
26 j+=sprintf(s+j,"%02d",tm->tm_year%100);
28 case 'Y': if ((j+4) >=max) return 0;
29 j+=sprintf(s+j,"%d",tm->tm_year+1900);
31 case 'b': if ((j+3)>=max) return 0;
32 strcpy(s+j,monthAbbr[tm->tm_mon]);
35 case 'l': if ((j+2) >= max) return 0;
36 { int hour = tm->tm_hour;
37 if (hour>12) hour -=12;
38 if (hour == 0) hour = 12;
39 j+=sprintf(s+j,"%2d",hour);
42 case 'p': if ((j+2) >= max) return 0;
43 if (tm->tm_hour >11) {
50 case 'H': if ((j+2) >= max) return 0;
51 j+=sprintf(s+j,"%02d",tm->tm_hour);
53 case 'M':if ((j+2) >= max) return 0;
54 j+=sprintf(s+j,"%02d",tm->tm_min);
56 case 'S':if ((j+2) >= max) return 0;
57 j+=sprintf(s+j,"%02d",tm->tm_sec);