time_t change;	 int computed_for;	 } tz_rule;
if (tp) { if (use_localtime) { if (!__use_tzfile) { int isdst;   if (__builtin_expect (tz_rules[0].change > tz_rules[1].change, 0)) isdst = (*timer < tz_rules[1].change || *timer >= tz_rules[0].change); else isdst = (*timer >= tz_rules[0].change && *timer < tz_rules[1].change); tp->tm_isdst = isdst; tp->tm_zone = __tzname[isdst]; tp->tm_gmtoff = tz_rules[isdst].offset; } } else { tp->tm_isdst = 0; tp->tm_zone = "GMT"; tp->tm_gmtoff = 0L; }  if (__offtime (timer, tp->tm_gmtoff - leap_correction, tp)) tp->tm_sec += leap_extra_secs; else tp = NULL; }  __libc_lock_unlock (tzset_lock);  return tp; }
weak_alias (__tzname, tzname)weak_alias (__daylight, daylight)weak_alias (__timezone, timezone)/* This locks all the state variables in tzfile.c and this file.  */__libc_lock_define_initialized (static, tzset_lock)#define	min(a, b)	((a) < (b) ? (a) : (b))#define	max(a, b)	((a) > (b) ? (a) : (b))#define	sign(x)		((x) < 0 ? -1 : 1)/* This structure contains all the information about a   timezone given in the POSIX standard TZ envariable.  */typedef struct  {    const char *name;    /* When to change.  */    enum { J0, J1, M } type;	/* Interpretation of:  */    unsigned short int m, n, d;	/* Month, week, day.  */    unsigned int secs;		/* Time of day.  */    long int offset;		/* Seconds east of GMT (west if < 0).  */    /* We cache the computed time of change for a       given year so we don't have to recompute it.  */    time_t change;	/* When to change to this zone.  */    int computed_for;	/* Year above is computed for.  */  } tz_rule;