| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
#ifndef TSTR_FORMAT_H |
|
2
|
|
|
|
|
|
|
#define TSTR_FORMAT_H |
|
3
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
#include |
|
5
|
|
|
|
|
|
|
#include |
|
6
|
|
|
|
|
|
|
#include |
|
7
|
|
|
|
|
|
|
#include "tstr_packed_alnum.h" |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
typedef enum { |
|
10
|
|
|
|
|
|
|
TSTR_FORMAT_UNKNOWN = 0, |
|
11
|
|
|
|
|
|
|
TSTR_FORMAT_ANSIC, |
|
12
|
|
|
|
|
|
|
TSTR_FORMAT_ASN1GT, |
|
13
|
|
|
|
|
|
|
TSTR_FORMAT_ASN1UT, |
|
14
|
|
|
|
|
|
|
TSTR_FORMAT_CLF, |
|
15
|
|
|
|
|
|
|
TSTR_FORMAT_DATETIME, |
|
16
|
|
|
|
|
|
|
TSTR_FORMAT_ECMASCRIPT, |
|
17
|
|
|
|
|
|
|
TSTR_FORMAT_GITDATE, |
|
18
|
|
|
|
|
|
|
TSTR_FORMAT_ISO8601, |
|
19
|
|
|
|
|
|
|
TSTR_FORMAT_ISO9075, |
|
20
|
|
|
|
|
|
|
TSTR_FORMAT_RFC2616, |
|
21
|
|
|
|
|
|
|
TSTR_FORMAT_RFC2822, |
|
22
|
|
|
|
|
|
|
TSTR_FORMAT_RFC2822FWS, |
|
23
|
|
|
|
|
|
|
TSTR_FORMAT_RFC3339, |
|
24
|
|
|
|
|
|
|
TSTR_FORMAT_RFC3501, |
|
25
|
|
|
|
|
|
|
TSTR_FORMAT_RFC4287, |
|
26
|
|
|
|
|
|
|
TSTR_FORMAT_RFC5280, |
|
27
|
|
|
|
|
|
|
TSTR_FORMAT_RFC5545, |
|
28
|
|
|
|
|
|
|
TSTR_FORMAT_RFC9557, |
|
29
|
|
|
|
|
|
|
TSTR_FORMAT_RUBYDATE, |
|
30
|
|
|
|
|
|
|
TSTR_FORMAT_UNIXDATE, |
|
31
|
|
|
|
|
|
|
TSTR_FORMAT_UNIXSTAMP, |
|
32
|
|
|
|
|
|
|
TSTR_FORMAT_W3CDTF, |
|
33
|
|
|
|
|
|
|
TSTR_FORMAT_TYPE_COUNT, |
|
34
|
|
|
|
|
|
|
} tstr_format_t; |
|
35
|
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
static inline bool tstr_format_is_known(tstr_format_t fmt) { |
|
37
|
|
|
|
|
|
|
return (fmt > TSTR_FORMAT_UNKNOWN && fmt < TSTR_FORMAT_TYPE_COUNT); |
|
38
|
|
|
|
|
|
|
} |
|
39
|
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
static inline const char * tstr_format_name(tstr_format_t fmt) { |
|
41
|
|
|
|
|
|
|
static const char * kFormatName[TSTR_FORMAT_TYPE_COUNT] = { |
|
42
|
|
|
|
|
|
|
[TSTR_FORMAT_UNKNOWN] = "Unknown", |
|
43
|
|
|
|
|
|
|
[TSTR_FORMAT_ANSIC] = "ANSIC", |
|
44
|
|
|
|
|
|
|
[TSTR_FORMAT_ASN1GT] = "ASN.1 GeneralizedTime", |
|
45
|
|
|
|
|
|
|
[TSTR_FORMAT_ASN1UT] = "ASN.1 UTCTime", |
|
46
|
|
|
|
|
|
|
[TSTR_FORMAT_CLF] = "Common Log Format", |
|
47
|
|
|
|
|
|
|
[TSTR_FORMAT_DATETIME] = "DateTime", |
|
48
|
|
|
|
|
|
|
[TSTR_FORMAT_ECMASCRIPT] = "ECMAScript", |
|
49
|
|
|
|
|
|
|
[TSTR_FORMAT_GITDATE] = "GitDate", |
|
50
|
|
|
|
|
|
|
[TSTR_FORMAT_ISO8601] = "ISO 8601", |
|
51
|
|
|
|
|
|
|
[TSTR_FORMAT_ISO9075] = "ISO 9075", |
|
52
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC2616] = "RFC 2616", |
|
53
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC2822] = "RFC 2822", |
|
54
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC2822FWS] = "RFC 2822 (Folding WS)", |
|
55
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC3339] = "RFC 3339", |
|
56
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC3501] = "RFC 3501", |
|
57
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC4287] = "RFC 4287", |
|
58
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC5280] = "RFC 5280", |
|
59
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC5545] = "RFC 5545", |
|
60
|
|
|
|
|
|
|
[TSTR_FORMAT_RFC9557] = "RFC 9557", |
|
61
|
|
|
|
|
|
|
[TSTR_FORMAT_RUBYDATE] = "RubyDate", |
|
62
|
|
|
|
|
|
|
[TSTR_FORMAT_UNIXDATE] = "UnixDate", |
|
63
|
|
|
|
|
|
|
[TSTR_FORMAT_UNIXSTAMP] = "UnixStamp", |
|
64
|
|
|
|
|
|
|
[TSTR_FORMAT_W3CDTF] = "W3CDTF", |
|
65
|
|
|
|
|
|
|
}; |
|
66
|
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
if (!tstr_format_is_known(fmt)) |
|
68
|
|
|
|
|
|
|
fmt = TSTR_FORMAT_UNKNOWN; |
|
69
|
|
|
|
|
|
|
return kFormatName[fmt]; |
|
70
|
|
|
|
|
|
|
} |
|
71
|
|
|
|
|
|
|
|
|
72
|
1602
|
|
|
|
|
|
static inline tstr_format_t tstr_format_from_packed_alnum(uint64_t packed) { |
|
73
|
1602
|
|
|
|
|
|
switch (packed) { |
|
74
|
34
|
|
|
|
|
|
case TSTR_PACKED_ALNUM5('A','N','S','I','C'): |
|
75
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM5('C','T','I','M','E'): |
|
76
|
34
|
|
|
|
|
|
return TSTR_FORMAT_ANSIC; |
|
77
|
142
|
|
|
|
|
|
case TSTR_PACKED_ALNUM6('A','S','N','1','G','T'): |
|
78
|
142
|
|
|
|
|
|
return TSTR_FORMAT_ASN1GT; |
|
79
|
59
|
|
|
|
|
|
case TSTR_PACKED_ALNUM6('A','S','N','1','U','T'): |
|
80
|
59
|
|
|
|
|
|
return TSTR_FORMAT_ASN1UT; |
|
81
|
61
|
|
|
|
|
|
case TSTR_PACKED_ALNUM3('C','L','F'): |
|
82
|
61
|
|
|
|
|
|
return TSTR_FORMAT_CLF; |
|
83
|
221
|
|
|
|
|
|
case TSTR_PACKED_ALNUM8('D','A','T','E','T','I','M','E'): |
|
84
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('G','E','N','E','R','I','C'): |
|
85
|
221
|
|
|
|
|
|
return TSTR_FORMAT_DATETIME; |
|
86
|
57
|
|
|
|
|
|
case TSTR_PACKED_ALNUM10('E','C','M','A','S','C','R','I','P','T'): |
|
87
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM10('J','A','V','A','S','C','R','I','P','T'): |
|
88
|
57
|
|
|
|
|
|
return TSTR_FORMAT_ECMASCRIPT; |
|
89
|
41
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('G','I','T','D','A','T','E'): |
|
90
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM3('G','I','T'): |
|
91
|
41
|
|
|
|
|
|
return TSTR_FORMAT_GITDATE; |
|
92
|
121
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('I','S','O','8','6','0','1'): |
|
93
|
121
|
|
|
|
|
|
return TSTR_FORMAT_ISO8601; |
|
94
|
68
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('I','S','O','9','0','7','5'): |
|
95
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM3('S','Q','L'): |
|
96
|
68
|
|
|
|
|
|
return TSTR_FORMAT_ISO9075; |
|
97
|
44
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','2','6','1','6'): |
|
98
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','7','2','3','1'): |
|
99
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM4('H','T','T','P'): |
|
100
|
44
|
|
|
|
|
|
return TSTR_FORMAT_RFC2616; |
|
101
|
56
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','2','8','2','2'): |
|
102
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','5','3','2','2'): |
|
103
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM5('E','M','A','I','L'): |
|
104
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM3('I','M','F'): |
|
105
|
56
|
|
|
|
|
|
return TSTR_FORMAT_RFC2822; |
|
106
|
24
|
|
|
|
|
|
case TSTR_PACKED_ALNUM10('R','F','C','2','8','2','2','F','W','S'): |
|
107
|
24
|
|
|
|
|
|
return TSTR_FORMAT_RFC2822FWS; |
|
108
|
123
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','3','3','3','9'): |
|
109
|
123
|
|
|
|
|
|
return TSTR_FORMAT_RFC3339; |
|
110
|
54
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','3','5','0','1'): |
|
111
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','9','0','5','1'): |
|
112
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM4('I','M','A','P'): |
|
113
|
54
|
|
|
|
|
|
return TSTR_FORMAT_RFC3501; |
|
114
|
45
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','4','2','8','7'): |
|
115
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM4('A','T','O','M'): |
|
116
|
45
|
|
|
|
|
|
return TSTR_FORMAT_RFC4287; |
|
117
|
42
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','5','2','8','0'): |
|
118
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM4('X','5','0','9'): |
|
119
|
42
|
|
|
|
|
|
return TSTR_FORMAT_RFC5280; |
|
120
|
39
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','5','5','4','5'): |
|
121
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM4('I','C','A','L'): |
|
122
|
39
|
|
|
|
|
|
return TSTR_FORMAT_RFC5545; |
|
123
|
74
|
|
|
|
|
|
case TSTR_PACKED_ALNUM7('R','F','C','9','5','5','7'): |
|
124
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM5('I','X','D','T','F'): |
|
125
|
74
|
|
|
|
|
|
return TSTR_FORMAT_RFC9557; |
|
126
|
40
|
|
|
|
|
|
case TSTR_PACKED_ALNUM8('R','U','B','Y','D','A','T','E'): |
|
127
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM4('R','U','B','Y'): |
|
128
|
40
|
|
|
|
|
|
return TSTR_FORMAT_RUBYDATE; |
|
129
|
47
|
|
|
|
|
|
case TSTR_PACKED_ALNUM8('U','N','I','X','D','A','T','E'): |
|
130
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM4('U','N','I','X'): |
|
131
|
47
|
|
|
|
|
|
return TSTR_FORMAT_UNIXDATE; |
|
132
|
77
|
|
|
|
|
|
case TSTR_PACKED_ALNUM9('U','N','I','X','S','T','A','M','P'): |
|
133
|
77
|
|
|
|
|
|
return TSTR_FORMAT_UNIXSTAMP; |
|
134
|
131
|
|
|
|
|
|
case TSTR_PACKED_ALNUM6('W','3','C','D','T','F'): |
|
135
|
|
|
|
|
|
|
case TSTR_PACKED_ALNUM3('W','3','C'): |
|
136
|
131
|
|
|
|
|
|
return TSTR_FORMAT_W3CDTF; |
|
137
|
2
|
|
|
|
|
|
default: |
|
138
|
2
|
|
|
|
|
|
return TSTR_FORMAT_UNKNOWN; |
|
139
|
|
|
|
|
|
|
} |
|
140
|
|
|
|
|
|
|
} |
|
141
|
|
|
|
|
|
|
|
|
142
|
1602
|
|
|
|
|
|
static inline tstr_format_t tstr_format_from_string(const char* src, |
|
143
|
|
|
|
|
|
|
size_t len) { |
|
144
|
|
|
|
|
|
|
uint64_t packed; |
|
145
|
|
|
|
|
|
|
|
|
146
|
1602
|
50
|
|
|
|
|
if (!len || tstr_packed_alnum_encode(src, len, &packed) != len) |
|
|
|
50
|
|
|
|
|
|
|
147
|
0
|
|
|
|
|
|
return TSTR_FORMAT_UNKNOWN; |
|
148
|
1602
|
|
|
|
|
|
return tstr_format_from_packed_alnum(packed); |
|
149
|
|
|
|
|
|
|
} |
|
150
|
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
#endif /* TSTR_FORMAT_H */ |