Exemple #1
0
Fichier : util.c Projet : aosm/X11
/* Return the current time as a signed 64-bit number of seconds since
   midnight, 1 January 1904.  This is apparently when the Macintosh
   was designed. */
int
macTime(int *hi, unsigned *lo)
{
    unsigned long diff;		/* Not time_t */
    time_t macEpoch, current;
    struct tm tm;
    tm.tm_sec = 0;
    tm.tm_min = 0;
    tm.tm_hour = 0;
    tm.tm_mday = 1;
    tm.tm_mon = 1;
    tm.tm_year = 4;
    tm.tm_isdst = -1;

    macEpoch = mktime_gmt(&tm);
    if(macEpoch < 0) return -1;

    current = time(NULL);
    if(current < 0)
        return -1;

    if(current < macEpoch) {
        errno = EINVAL;
        return -1;
    }

    diff = current - macEpoch;
#if INT_MAX == LONG_MAX
    *hi = 0;
#else
    *hi = diff >> 32;
#endif
    *lo = diff & 0xFFFFFFFF;
    return 0;
}
Exemple #2
0
//-----------------------------------------------------------------//
time_t mktime(const struct tm *tmp)
{
	time_t	t = mktime_gmt(tmp);

// GMT からの偏差(-9時間)
	t -= (time_t)timezone_offset_ * 3600;

	return t;
}
Exemple #3
0
int parse_time(const char *buf, int offset, int len, time_t * time_return)
{
	struct tm tm;
	time_t t;
	int i = offset;

	i = skip_word(buf, i, len);
	if (i < 0)
		return -1;
	i = skip_separator(buf, i, len);
	if (i < 0)
		return -1;

	if (i >= len)
		return -1;

	if (d2i(buf[i]) >= 0) {
		i = parse_int(buf, i, len, &tm.tm_mday);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_month(buf, i, len, &tm.tm_mon);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_year);
		if (i < 0)
			return -1;
		if (tm.tm_year < 100)
			tm.tm_year += 1900;
		if (tm.tm_year < 1937)
			tm.tm_year += 100;
		if (tm.tm_year < 1937)
			return -1;

		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_hour);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_min);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_sec);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = skip_word(buf, i, len);
		if (i < 0)
			return -1;
	} else {		
		i = parse_month(buf, i, len, &tm.tm_mon);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_mday);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_hour);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_min);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_sec);
		if (i < 0)
			return -1;
		i = skip_separator(buf, i, len);
		if (i < 0)
			return -1;
		i = parse_int(buf, i, len, &tm.tm_year);
		if (i < 0)
			return -1;
		if (tm.tm_year < 100)
			tm.tm_year += 1900;
		if (tm.tm_year < 1937)
			tm.tm_year += 100;
		if (tm.tm_year < 1937 || tm.tm_year > 2040)
			return -1;
	}

	if (tm.tm_year < 2038) {
		tm.tm_year -= 1900;
		tm.tm_isdst = -1;
		t = mktime_gmt(&tm);
		if (t == -1)
			return -1;
	} else {
		t = time_t_max;
	}

	*time_return = t;
	return i;
}