dfc79e892f
Upgrade of the tzcode from 2004a to 2009e. Changes are numerous, but include... - New format of the output of zic, which supports both 32 and 64 bit time_t formats. - zdump on 64 bit platforms will actually produce some output instead of doing nothing for a looooooooong time. - linux_base-fX, with X >= at least 8, will work without problems related to the local time again. The original patch, based on the 2008e, has been running for a long time on both my laptop and desktop machine and have been tested by other people. After the installation of this code and the running of zic(8), you need to run tzsetup(8) again to install the new datafile. Approved by: wollman@ for usr.sbin/zic MFC after: 1 month
69 lines
1.3 KiB
C
69 lines
1.3 KiB
C
/*
|
|
** This file is in the public domain, so clarified as of
|
|
** 2006-07-17 by Arthur David Olson.
|
|
*/
|
|
|
|
#ifndef lint
|
|
#ifndef NOID
|
|
static const char elsieid[] = "@(#)scheck.c 8.19";
|
|
#endif /* !defined lint */
|
|
#endif /* !defined NOID */
|
|
|
|
#ifndef lint
|
|
static const char rcsid[] =
|
|
"$FreeBSD$";
|
|
#endif /* not lint */
|
|
|
|
/*LINTLIBRARY*/
|
|
|
|
#include "private.h"
|
|
|
|
const char *
|
|
scheck(string, format)
|
|
const char * const string;
|
|
const char * const format;
|
|
{
|
|
register char * fbuf;
|
|
register const char * fp;
|
|
register char * tp;
|
|
register int c;
|
|
register const char * result;
|
|
char dummy;
|
|
|
|
result = "";
|
|
if (string == NULL || format == NULL)
|
|
return result;
|
|
fbuf = imalloc((int) (2 * strlen(format) + 4));
|
|
if (fbuf == NULL)
|
|
return result;
|
|
fp = format;
|
|
tp = fbuf;
|
|
while ((*tp++ = c = *fp++) != '\0') {
|
|
if (c != '%')
|
|
continue;
|
|
if (*fp == '%') {
|
|
*tp++ = *fp++;
|
|
continue;
|
|
}
|
|
*tp++ = '*';
|
|
if (*fp == '*')
|
|
++fp;
|
|
while (is_digit(*fp))
|
|
*tp++ = *fp++;
|
|
if (*fp == 'l' || *fp == 'h')
|
|
*tp++ = *fp++;
|
|
else if (*fp == '[')
|
|
do *tp++ = *fp++;
|
|
while (*fp != '\0' && *fp != ']');
|
|
if ((*tp++ = *fp++) == '\0')
|
|
break;
|
|
}
|
|
*(tp - 1) = '%';
|
|
*tp++ = 'c';
|
|
*tp = '\0';
|
|
if (sscanf(string, fbuf, &dummy) != 1)
|
|
result = (char *) format;
|
|
ifree(fbuf);
|
|
return result;
|
|
}
|