| 2166 | } |
| 2167 | switch (*fields[RF_NAME]) { |
| 2168 | case '\0': |
| 2169 | case ' ': case '\f': case '\n': case '\r': case '\t': case '\v': |
| 2170 | case '+': case '-': |
| 2171 | case '0': case '1': case '2': case '3': case '4': |
| 2172 | case '5': case '6': case '7': case '8': case '9': |
| 2173 | error(N_("Invalid rule name \"%s\""), fields[RF_NAME]); |
| 2174 | return; |
| 2175 | } |
| 2176 | r.r_filenum = filenum; |
| 2177 | r.r_linenum = linenum; |
| 2178 | r.r_save = getsave(fields[RF_SAVE], &r.r_isdst); |
| 2179 | if (!rulesub(&r, fields[RF_LOYEAR], fields[RF_HIYEAR], |
| 2180 | fields[RF_COMMAND], fields[RF_MONTH], fields[RF_DAY], |
| 2181 | fields[RF_TOD])) |
| 2182 | return; |
| 2183 | r.r_name = xstrdup(fields[RF_NAME]); |
| 2184 | r.r_abbrvar = xstrdup(fields[RF_ABBRVAR]); |
| 2185 | if (max_abbrvar_len < strlen(r.r_abbrvar)) |
| 2186 | max_abbrvar_len = strlen(r.r_abbrvar); |
| 2187 | rules = growalloc(rules, sizeof *rules, nrules, &nrules_alloc); |
| 2188 | rules[nrules++] = r; |
| 2189 | } |
| 2190 | |
| 2191 | static bool |
| 2192 | inzone(char **fields, int nfields) |
| 2193 | { |
| 2194 | register ptrdiff_t i; |
| 2195 | |
| 2196 | if (nfields < ZONE_MINFIELDS || nfields > ZONE_MAXFIELDS) { |
| 2197 | error(N_("wrong number of fields on Zone line")); |
| 2198 | return false; |
| 2199 | } |
| 2200 | if (lcltime != NULL && strcmp(fields[ZF_NAME], tzdefault) == 0) { |
| 2201 | error(N_("\"Zone %s\" line and -l option are mutually exclusive"), |