Used to ensure that an AI component conforms to the YYMMDD or YYMM00 formats.
62{
63
64
65#define YY ( (data[0] - '0') * 10 + (data[1] - '0') )
66
67
68 size_t pos;
69 char yyyymmdd[9] = {0};
71
72 assert(data);
73
74
75
76
77
78 for (pos = 0; pos < 6 && data[pos]; pos++) {
82 pos,
83 1
84 );
85 }
86
87
88
89
90
94 0,
95 pos + (data[pos] ? 1 : 0)
96 );
97
98 memcpy(yyyymmdd + 2, data, 6);
99
100
101
102
103
105 yyyymmdd[0] = '1'; yyyymmdd[1] = '9';
107 yyyymmdd[0] = '2'; yyyymmdd[1] = '0';
108 } else {
109 yyyymmdd[0] = '2'; yyyymmdd[1] = '1';
110 }
111
113
117
119 assert(!err_pos || !err_len || ret ==
GS1_LINTER_OK || (*err_pos + *err_len <= 8));
120
123 ret,
124 *err_pos - 2,
125 *err_len
126 );
127
129
130}
#define GS1_LINTER_UNLIKELY(x)
Implemention may provide hint to the compiler that the expression is likely to be false.
Definition gs1syntaxdictionary-utils.h:76
#define GS1_LINTER_RETURN_ERROR(error, position, length)
Return from a linter indicating that a problem was detected with the given data.
Definition gs1syntaxdictionary-utils.h:103
#define GS1_LINTER_RETURN_OK
Return from a linter indicating that no problem was detected with the given data.
Definition gs1syntaxdictionary-utils.h:88
GS1_SYNTAX_DICTIONARY_API gs1_lint_err_t gs1_lint_yyyymmd0(const char *data, size_t *err_pos, size_t *err_len)
Definition lint_yyyymmd0.c:55
gs1_lint_err_t
Linter return codes other than GS1_LINTER_OK indicate an error condition.
Definition gs1syntaxdictionary.h:76
@ GS1_LINTER_ILLEGAL_DAY
The date contains an illegal day of the month.
Definition gs1syntaxdictionary.h:114
@ GS1_LINTER_DATE_TOO_LONG
The date is too long for YYMMDD format.
Definition gs1syntaxdictionary.h:106
@ GS1_LINTER_ILLEGAL_MONTH
The date contains an illegal month of the year.
Definition gs1syntaxdictionary.h:113
@ GS1_LINTER_DATE_TOO_SHORT
The date is too short for YYMMDD format.
Definition gs1syntaxdictionary.h:105
@ GS1_LINTER_OK
No issues were detected by the linter.
Definition gs1syntaxdictionary.h:77
@ GS1_LINTER_NON_DIGIT_CHARACTER
A non-digit character was found where a digit is expected.
Definition gs1syntaxdictionary.h:78
#define CURRENT_YEAR
20YY: For converting YY to 19YY, 20YY, 21YY, etc. for leap year validation
Definition lint_yymmd0.c:38