21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
-
-
-
+
+
+
-
+
-
+
-
-
+
|
#import "macros.h"
const char *
OFStrPTime(const char *buffer, const char *format, struct tm *tm, short *tz)
{
enum {
StateSearchConversionSpecifier,
StateInConversionSpecifier
} state = StateSearchConversionSpecifier;
stateSearchConversionSpecifier,
stateInConversionSpecifier
} state = stateSearchConversionSpecifier;
size_t j, bufferLen, formatLen;
bufferLen = strlen(buffer);
formatLen = strlen(format);
j = 0;
for (size_t i = 0; i < formatLen; i++) {
if (j >= bufferLen)
return NULL;
switch (state) {
case StateSearchConversionSpecifier:
case stateSearchConversionSpecifier:
if (format[i] == '%')
state = StateInConversionSpecifier;
state = stateInConversionSpecifier;
else if (format[i] != buffer[j++])
return NULL;
break;
case StateInConversionSpecifier:;
case stateInConversionSpecifier:;
int k, maxLen, number = 0;
switch (format[i]) {
case 'd':
case 'e':
case 'H':
case 'm':
|
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
|
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
|
-
+
|
break;
case 't':
if (buffer[j++] != '\t')
return NULL;
break;
}
state = StateSearchConversionSpecifier;
state = stateSearchConversionSpecifier;
break;
}
}
return buffer + j;
}
|