Home | History | Annotate | Download | only in tzcode

Lines Matching refs:sp

149 static void		gmtload(struct state * sp);
175 const struct state * sp, struct tm * tmp);
180 static int typesequiv(const struct state * sp, int a, int b);
181 static int tzload(const char * name, struct state * sp,
183 static int tzparse(const char * name, struct state * sp,
259 register struct state * const sp = lclptr;
272 if (sp == NULL) {
277 for (i = 0; i < sp->typecnt; ++i) {
278 register const struct ttinfo * const ttisp = &sp->ttis[i];
281 &sp->chars[ttisp->tt_abbrind];
296 for (i = 0; i < sp->timecnt; ++i) {
298 &sp->ttis[
299 sp->types[i]];
302 &sp->chars[ttisp->tt_abbrind];
308 for (i = 0; i < sp->charcnt; ++i)
309 if (strchr(TZ_ABBR_CHAR_SET, sp->chars[i]) == NULL)
310 sp->chars[i] = TZ_ABBR_ERR_CHAR;
314 for (i = 0; i < sp->typecnt; ++i) {
315 register const struct ttinfo * const ttisp = &sp->ttis[i];
316 register char * cp = &sp->chars[ttisp->tt_abbrind];
336 tzload(name, sp, doextend)
338 register struct state * const sp;
349 2 * sizeof *sp +
398 sp->leapcnt = (int) detzcode(u.tzhead.tzh_leapcnt);
399 sp->timecnt = (int) detzcode(u.tzhead.tzh_timecnt);
400 sp->typecnt = (int) detzcode(u.tzhead.tzh_typecnt);
401 sp->charcnt = (int) detzcode(u.tzhead.tzh_charcnt);
403 if (sp->leapcnt < 0 || sp->leapcnt > TZ_MAX_LEAPS ||
404 sp->typecnt <= 0 || sp->typecnt > TZ_MAX_TYPES ||
405 sp->timecnt < 0 || sp->timecnt > TZ_MAX_TIMES ||
406 sp->charcnt < 0 || sp->charcnt > TZ_MAX_CHARS ||
407 (ttisstdcnt != sp->typecnt && ttisstdcnt != 0) ||
408 (ttisgmtcnt != sp->typecnt && ttisgmtcnt != 0))
411 sp->timecnt * stored + /* ats */
412 sp->timecnt + /* types */
413 sp->typecnt * 6 + /* ttinfos */
414 sp->charcnt + /* chars */
415 sp->leapcnt * (stored + 4) + /* lsinfos */
419 for (i = 0; i < sp->timecnt; ++i) {
420 sp->ats[i] = (stored == 4) ?
424 for (i = 0; i < sp->timecnt; ++i) {
425 sp->types[i] = (unsigned char) *p++;
426 if (sp->types[i] >= sp->typecnt)
429 for (i = 0; i < sp->typecnt; ++i) {
432 ttisp = &sp->ttis[i];
440 ttisp->tt_abbrind > sp->charcnt)
443 for (i = 0; i < sp->charcnt; ++i)
444 sp->chars[i] = *p++;
445 sp->chars[i] = '\0'; /* ensure '\0' at end */
446 for (i = 0; i < sp->leapcnt; ++i) {
449 lsisp = &sp->lsis[i];
456 for (i = 0; i < sp->typecnt; ++i) {
459 ttisp = &sp->ttis[i];
469 for (i = 0; i < sp->typecnt; ++i) {
472 ttisp = &sp->ttis[i];
487 for (i = 0; i < sp->timecnt - 2; ++i)
488 if (sp->ats[i] > sp->ats[i + 1]) {
494 sp->timecnt = i;
501 for (j = 0; j + i < sp->timecnt; ++j) {
502 sp->ats[j] = sp->ats[j + i];
503 sp->types[j] = sp->types[j + i];
505 sp->timecnt = j;
525 sp->typecnt + 2 <= TZ_MAX_TYPES) {
532 sp->charcnt + ts.charcnt <= TZ_MAX_CHARS) {
535 sp->charcnt;
537 sp->chars[sp->charcnt++] =
542 sp->ats[sp->timecnt - 1])
545 sp->timecnt < TZ_MAX_TIMES) {
546 sp->ats[sp->timecnt] =
548 sp->types[sp->timecnt] =
549 sp->typecnt +
551 ++sp->timecnt;
554 sp->ttis[sp->typecnt++] = ts.ttis[0];
555 sp->ttis[sp->typecnt++] = ts.ttis[1];
558 sp->goback = sp->goahead = FALSE;
559 if (sp->timecnt > 1) {
560 for (i = 1; i < sp->timecnt; ++i)
561 if (typesequiv(sp, sp->types[i], sp->types[0]) &&
562 differ_by_repeat(sp->ats[i], sp->ats[0])) {
563 sp->goback = TRUE;
566 for (i = sp->timecnt - 2; i >= 0; --i)
567 if (typesequiv(sp, sp->types[sp->timecnt - 1],
568 sp->types[i]) &&
569 differ_by_repeat(sp->ats[sp->timecnt - 1],
570 sp->ats[i])) {
571 sp->goahead = TRUE;
579 typesequiv(sp, a, b)
580 const struct state * const sp;
586 if (sp == NULL ||
587 a < 0 || a >= sp->typecnt ||
588 b < 0 || b >= sp->typecnt)
591 register const struct ttinfo * ap = &sp->ttis[a];
592 register const struct ttinfo * bp = &sp->ttis[b];
597 strcmp(&sp->chars[ap->tt_abbrind],
598 &sp->chars[bp->tt_abbrind]) == 0;
908 tzparse(name, sp, lastditch)
910 register struct state * const sp;
929 if (stdlen >= sizeof sp->chars)
930 stdlen = (sizeof sp->chars) - 1;
951 load_result = tzload(TZDEFRULES, sp, FALSE);
953 sp->leapcnt = 0; /* so, we're off a little */
991 sp->typecnt = 2; /* standard time and DST */
995 sp->ttis[0].tt_gmtoff = -dstoffset;
996 sp->ttis[0].tt_isdst = 1;
997 sp->ttis[0].tt_abbrind = stdlen + 1;
998 sp->ttis[1].tt_gmtoff = -stdoffset;
999 sp->ttis[1].tt_isdst = 0;
1000 sp->ttis[1].tt_abbrind = 0;
1001 atp = sp->ats;
1002 typep = sp->types;
1004 sp->timecnt = 0;
1006 sp->timecnt + 2 <= TZ_MAX_TIMES;
1025 sp->timecnt += 2;
1047 for (i = 0; i < sp->timecnt; ++i) {
1048 j = sp->types[i];
1049 if (!sp->ttis[j].tt_isdst) {
1051 -sp->ttis[j].tt_gmtoff;
1056 for (i = 0; i < sp->timecnt; ++i) {
1057 j = sp->types[i];
1058 if (sp->ttis[j].tt_isdst) {
1060 -sp->ttis[j].tt_gmtoff;
1073 for (i = 0; i < sp->timecnt; ++i) {
1074 j = sp->types[i];
1075 sp->types[i] = sp->ttis[j].tt_isdst;
1076 if (sp->ttis[j].tt_ttisgmt) {
1093 if (isdst && !sp->ttis[j].tt_ttisstd) {
1094 sp->ats[i] += dstoffset -
1097 sp->ats[i] += stdoffset -
1101 theiroffset = -sp->ttis[j].tt_gmtoff;
1102 if (sp->ttis[j].tt_isdst)
1110 sp->ttis[0].tt_gmtoff = -stdoffset;
1111 sp->ttis[0].tt_isdst = FALSE;
1112 sp->ttis[0].tt_abbrind = 0;
1113 sp->ttis[1].tt_gmtoff = -dstoffset;
1114 sp->ttis[1].tt_isdst = TRUE;
1115 sp->ttis[1].tt_abbrind = stdlen + 1;
1116 sp->typecnt = 2;
1120 sp->typecnt = 1; /* only standard time */
1121 sp->timecnt = 0;
1122 sp->ttis[0].tt_gmtoff = -stdoffset;
1123 sp->ttis[0].tt_isdst = 0;
1124 sp->ttis[0].tt_abbrind = 0;
1126 sp->charcnt = stdlen + 1;
1128 sp->charcnt += dstlen + 1;
1129 if ((size_t) sp->charcnt > sizeof sp->chars)
1131 cp = sp->chars;
1143 gmtload(sp)
1144 struct state * const sp;
1146 if (tzload(gmt, sp, TRUE) != 0)
1147 (void) tzparse(gmt, sp, TRUE);
1237 register struct state * sp;
1243 sp = lclptr;
1245 if (sp == NULL)
1248 if ((sp->goback && t < sp->ats[0]) ||
1249 (sp->goahead && t > sp->ats[sp->timecnt - 1])) {
1255 if (t < sp->ats[0])
1256 seconds = sp->ats[0] - t;
1257 else seconds = t - sp->ats[sp->timecnt - 1];
1267 if (t < sp->ats[0])
1270 if (newt < sp->ats[0] ||
1271 newt > sp->ats[sp->timecnt - 1])
1278 if (t < sp->ats[0])
1287 if (sp->timecnt == 0 || t < sp->ats[0]) {
1289 while (sp->ttis[i].tt_isdst)
1290 if (++i >= sp->typecnt) {
1296 register int hi = sp->timecnt;
1301 if (t < sp->ats[mid])
1305 i = (int) sp->types[lo - 1];
1307 ttisp = &sp->ttis[i];
1312 ** timesub(&t, 0L, sp, tmp);
1314 result = timesub(&t, ttisp->tt_gmtoff, sp, tmp);
1316 tzname[tmp->tm_isdst] = &sp->chars[ttisp->tt_abbrind];
1318 tmp->TM_ZONE = &sp->chars[ttisp->tt_abbrind];
1431 timesub(timep, offset, sp, tmp)
1434 register const struct state * const sp;
1450 i = (sp == NULL) ? 0 : sp->leapcnt;
1453 i = sp->leapcnt;
1456 lp = &sp->lsis[i];
1460 lp->ls_corr > sp->lsis[i - 1].ls_corr);
1463 sp->lsis[i].ls_trans ==
1464 sp->lsis[i - 1].ls_trans + 1 &&
1465 sp->lsis[i].ls_corr ==
1466 sp->lsis[i - 1].ls_corr + 1) {
1682 register const struct state * sp;
1819 sp = (const struct state *)
1822 if (sp == NULL)
1825 for (i = sp->typecnt - 1; i >= 0; --i) {
1826 if (sp->ttis[i].tt_isdst != yourtm.tm_isdst)
1828 for (j = sp->typecnt - 1; j >= 0; --j) {
1829 if (sp->ttis[j].tt_isdst == yourtm.tm_isdst)
1831 newt = t + sp->ttis[j].tt_gmtoff -
1832 sp->ttis[i].tt_gmtoff;
1883 register const struct state * sp;
1914 sp = (const struct state *) ((funcp == localsub) ? lclptr : gmtptr);
1916 if (sp == NULL)
1919 for (i = 0; i < sp->typecnt; ++i)
1922 for (i = sp->timecnt - 1; i >= 0; --i)
1923 if (!seen[sp->types[i]]) {
1924 seen[sp->types[i]] = TRUE;
1925 types[nseen++] = sp->types[i];
1929 if (sp->ttis[samei].tt_isdst != tmp->tm_isdst)
1933 if (sp->ttis[otheri].tt_isdst == tmp->tm_isdst)
1935 tmp->tm_sec += sp->ttis[otheri].tt_gmtoff -
1936 sp->ttis[samei].tt_gmtoff;
1941 tmp->tm_sec -= sp->ttis[otheri].tt_gmtoff -
1942 sp->ttis[samei].tt_gmtoff;
2024 register struct state * sp;
2028 sp = lclptr;
2029 i = sp->leapcnt;
2031 lp = &sp->lsis[i];