⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 localtime.cc

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 CC
📖 第 1 页 / 共 4 页
字号:
/*** This file is in the public domain, so clarified as of** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).*//* Temporarily merged private.h and tzfile.h for ease of management - DJ */#include "winsup.h"#include "cygerrno.h"#include <windows.h>#define lint#define USG_COMPAT#ifndef lint#ifndef NOIDstatic char	elsieid[] = "@(#)localtime.c	7.66";#endif /* !defined NOID */#endif /* !defined lint *//*** Leap second handling from Bradley White (bww@k.gp.cs.cmu.edu).** POSIX-style TZ environment variable handling from Guy Harris** (guy@auspex.com).*//*LINTLIBRARY*/#ifndef PRIVATE_H#define PRIVATE_H/*** This file is in the public domain, so clarified as of** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).*//*** This header is for use ONLY with the time conversion code.** There is no guarantee that it will remain unchanged,** or that it will remain at all.** Do NOT copy it to any system include directory.** Thank you!*//*** ID*/#ifndef lint#ifndef NOIDstatic char	privatehid[] = "@(#)private.h	7.48";#endif /* !defined NOID */#endif /* !defined lint *//*** Defaults for preprocessor symbols.** You can override these in your C compiler options, e.g. `-DHAVE_ADJTIME=0'.*/#ifndef HAVE_ADJTIME#define HAVE_ADJTIME		1#endif /* !defined HAVE_ADJTIME */#ifndef HAVE_GETTEXT#define HAVE_GETTEXT		0#endif /* !defined HAVE_GETTEXT */#ifndef HAVE_SETTIMEOFDAY#define HAVE_SETTIMEOFDAY	3#endif /* !defined HAVE_SETTIMEOFDAY */#ifndef HAVE_STRERROR#define HAVE_STRERROR		0#endif /* !defined HAVE_STRERROR */#ifndef HAVE_SYMLINK#define HAVE_SYMLINK		1#endif /* !defined HAVE_SYMLINK */#ifndef HAVE_UNISTD_H#define HAVE_UNISTD_H		1#endif /* !defined HAVE_UNISTD_H */#ifndef HAVE_UTMPX_H#define HAVE_UTMPX_H		0#endif /* !defined HAVE_UTMPX_H */#ifndef LOCALE_HOME#define LOCALE_HOME		"/usr/lib/locale"#endif /* !defined LOCALE_HOME *//*** Nested includes*/#include "sys/types.h"	/* for time_t */#include "stdio.h"#include "limits.h"	/* for CHAR_BIT */#include "time.h"#include "stdlib.h"#if HAVE_GETTEXT - 0#include "libintl.h"#endif /* HAVE_GETTEXT - 0 */#if HAVE_UNISTD_H - 0#include "unistd.h"	/* for F_OK and R_OK */#endif /* HAVE_UNISTD_H - 0 */#if !(HAVE_UNISTD_H - 0)#ifndef F_OK#define F_OK	0#endif /* !defined F_OK */#ifndef R_OK#define R_OK	4#endif /* !defined R_OK */#endif /* !(HAVE_UNISTD_H - 0) *//* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX.  */#define is_digit(c) ((unsigned)(c) - '0' <= 9)/*** Workarounds for compilers/systems.*//*** SunOS 4.1.1 cc lacks const.*/#ifndef const#ifndef __STDC__#define const#endif /* !defined __STDC__ */#endif /* !defined const *//*** SunOS 4.1.1 cc lacks prototypes.*/#ifndef P#ifdef __STDC__#define P(x)	x#endif /* defined __STDC__ */#ifndef __STDC__#define P(x)	()#endif /* !defined __STDC__ */#endif /* !defined P *//*** SunOS 4.1.1 headers lack EXIT_SUCCESS.*/#ifndef EXIT_SUCCESS#define EXIT_SUCCESS	0#endif /* !defined EXIT_SUCCESS *//*** SunOS 4.1.1 headers lack EXIT_FAILURE.*/#ifndef EXIT_FAILURE#define EXIT_FAILURE	1#endif /* !defined EXIT_FAILURE *//*** SunOS 4.1.1 headers lack FILENAME_MAX.*/#ifndef FILENAME_MAX#ifndef MAXPATHLEN#ifdef unix#include "sys/param.h"#endif /* defined unix */#endif /* !defined MAXPATHLEN */#ifdef MAXPATHLEN#define FILENAME_MAX	MAXPATHLEN#endif /* defined MAXPATHLEN */#ifndef MAXPATHLEN#define FILENAME_MAX	1024		/* Pure guesswork */#endif /* !defined MAXPATHLEN */#endif /* !defined FILENAME_MAX *//*** SunOS 4.1.1 libraries lack remove.*/#ifndef removeextern int	unlink P((const char * filename));#define remove	unlink#endif /* !defined remove *//*** Finally, some convenience items.*/#ifndef TRUE#define TRUE	1#endif /* !defined TRUE */#ifndef FALSE#define FALSE	0#endif /* !defined FALSE */#ifndef TYPE_BIT#define TYPE_BIT(type)	(sizeof (type) * CHAR_BIT)#endif /* !defined TYPE_BIT */#ifndef TYPE_SIGNED#define TYPE_SIGNED(type) (((type) -1) < 0)#endif /* !defined TYPE_SIGNED */#ifndef INT_STRLEN_MAXIMUM/*** 302 / 1000 is log10(2.0) rounded up.** Subtract one for the sign bit if the type is signed;** add one for integer division truncation;** add one more for a minus sign if the type is signed.*/#define INT_STRLEN_MAXIMUM(type) \    ((TYPE_BIT(type) - TYPE_SIGNED(type)) * 302 / 1000 + 1 + TYPE_SIGNED(type))#endif /* !defined INT_STRLEN_MAXIMUM *//*** INITIALIZE(x)*/#ifndef GNUC_or_lint#ifdef lint#define GNUC_or_lint#endif /* defined lint */#ifndef lint#ifdef __GNUC__#define GNUC_or_lint#endif /* defined __GNUC__ */#endif /* !defined lint */#endif /* !defined GNUC_or_lint */#ifndef INITIALIZE#ifdef GNUC_or_lint#define INITIALIZE(x)	((x) = 0)#endif /* defined GNUC_or_lint */#ifndef GNUC_or_lint#define INITIALIZE(x)#endif /* !defined GNUC_or_lint */#endif /* !defined INITIALIZE *//*** For the benefit of GNU folk...** `_(MSGID)' uses the current locale's message library string for MSGID.** The default is to use gettext if available, and use MSGID otherwise.*/#ifndef _#if HAVE_GETTEXT - 0#define _(msgid) gettext(msgid)#else /* !(HAVE_GETTEXT - 0) */#define _(msgid) msgid#endif /* !(HAVE_GETTEXT - 0) */#endif /* !defined _ */#ifndef TZ_DOMAIN#define TZ_DOMAIN "tz"#endif /* !defined TZ_DOMAIN *//*** UNIX was a registered trademark of UNIX System Laboratories in 1993.*/#endif /* !defined PRIVATE_H */#ifndef TZFILE_H#define TZFILE_H/*** This file is in the public domain, so clarified as of** 1996-06-05 by Arthur David Olson (arthur_david_olson@nih.gov).*//*** This header is for use ONLY with the time conversion code.** There is no guarantee that it will remain unchanged,** or that it will remain at all.** Do NOT copy it to any system include directory.** Thank you!*//*** ID*/#ifndef lint#ifndef NOIDstatic char	tzfilehid[] = "@(#)tzfile.h	7.14";#endif /* !defined NOID */#endif /* !defined lint *//*** Information about time zone files.*/#ifndef TZDIR#define TZDIR	"/usr/local/etc/zoneinfo" /* Time zone object file directory */#endif /* !defined TZDIR */#ifndef TZDEFAULT#define TZDEFAULT	"localtime"#endif /* !defined TZDEFAULT */#ifndef TZDEFRULES#define TZDEFRULES	"posixrules"#endif /* !defined TZDEFRULES *//*** Each file begins with. . .*/#define	TZ_MAGIC	"TZif"struct tzhead {	char	tzh_magic[4];		/* TZ_MAGIC */	char	tzh_reserved[16];	/* reserved for future use */	char	tzh_ttisgmtcnt[4];	/* coded number of trans. time flags */	char	tzh_ttisstdcnt[4];	/* coded number of trans. time flags */	char	tzh_leapcnt[4];		/* coded number of leap seconds */	char	tzh_timecnt[4];		/* coded number of transition times */	char	tzh_typecnt[4];		/* coded number of local time types */	char	tzh_charcnt[4];		/* coded number of abbr. chars */};/*** . . .followed by. . .****	tzh_timecnt (char [4])s		coded transition times a la time(2)**	tzh_timecnt (unsigned char)s	types of local time starting at above**	tzh_typecnt repetitions of**		one (char [4])		coded UTC offset in seconds**		one (unsigned char)	used to set tm_isdst**		one (unsigned char)	that's an abbreviation list index**	tzh_charcnt (char)s		'\0'-terminated zone abbreviations**	tzh_leapcnt repetitions of**		one (char [4])		coded leap second transition times**		one (char [4])		total correction after above**	tzh_ttisstdcnt (char)s		indexed by type; if TRUE, transition**					time is standard time, if FALSE,**					transition time is wall clock time**					if absent, transition times are**					assumed to be wall clock time**	tzh_ttisgmtcnt (char)s		indexed by type; if TRUE, transition**					time is UTC, if FALSE,**					transition time is local time**					if absent, transition times are**					assumed to be local time*//*** In the current implementation, "tzset()" refuses to deal with files that** exceed any of the limits below.*/#ifndef TZ_MAX_TIMES/*** The TZ_MAX_TIMES value below is enough to handle a bit more than a** year's worth of solar time (corrected daily to the nearest second) or** 138 years of Pacific Presidential Election time** (where there are three time zone transitions every fourth year).*/#define TZ_MAX_TIMES	370#endif /* !defined TZ_MAX_TIMES */#ifndef TZ_MAX_TYPES#ifndef NOSOLAR#define TZ_MAX_TYPES	256 /* Limited by what (unsigned char)'s can hold */#endif /* !defined NOSOLAR */#ifdef NOSOLAR/*** Must be at least 14 for Europe/Riga as of Jan 12 1995,** as noted by Earl Chew <earl@hpato.aus.hp.com>.*/#define TZ_MAX_TYPES	20	/* Maximum number of local time types */#endif /* !defined NOSOLAR */#endif /* !defined TZ_MAX_TYPES */#ifndef TZ_MAX_CHARS#define TZ_MAX_CHARS	50	/* Maximum number of abbreviation characters */				/* (limited by what unsigned chars can hold) */#endif /* !defined TZ_MAX_CHARS */#ifndef TZ_MAX_LEAPS#define TZ_MAX_LEAPS	50	/* Maximum number of leap second corrections */#endif /* !defined TZ_MAX_LEAPS */#define SECSPERMIN	60#define MINSPERHOUR	60#define HOURSPERDAY	24#define DAYSPERWEEK	7#define DAYSPERNYEAR	365#define DAYSPERLYEAR	366#define SECSPERHOUR	(SECSPERMIN * MINSPERHOUR)#define SECSPERDAY	((long) SECSPERHOUR * HOURSPERDAY)#define MONSPERYEAR	12#define TM_SUNDAY	0#define TM_MONDAY	1#define TM_TUESDAY	2#define TM_WEDNESDAY	3#define TM_THURSDAY	4#define TM_FRIDAY	5#define TM_SATURDAY	6#define TM_JANUARY	0#define TM_FEBRUARY	1#define TM_MARCH	2#define TM_APRIL	3#define TM_MAY		4#define TM_JUNE		5#define TM_JULY		6#define TM_AUGUST	7#define TM_SEPTEMBER	8#define TM_OCTOBER	9#define TM_NOVEMBER	10#define TM_DECEMBER	11#define TM_YEAR_BASE	1900#define EPOCH_YEAR	1970#define EPOCH_WDAY	TM_THURSDAY/*** Accurate only for the past couple of centuries;** that will probably do.*/#define isleap(y) (((y) % 4) == 0 && (((y) % 100) != 0 || ((y) % 400) == 0))#ifndef USG/*** Use of the underscored variants may cause problems if you move your code to** certain System-V-based systems; for maximum portability, use the** underscore-free variants.  The underscored variants are provided for** backward compatibility only; they may disappear from future versions of** this file.*/#define SECS_PER_MIN	SECSPERMIN#define MINS_PER_HOUR	MINSPERHOUR#define HOURS_PER_DAY	HOURSPERDAY#define DAYS_PER_WEEK	DAYSPERWEEK#define DAYS_PER_NYEAR	DAYSPERNYEAR#define DAYS_PER_LYEAR	DAYSPERLYEAR#define SECS_PER_HOUR	SECSPERHOUR#define SECS_PER_DAY	SECSPERDAY#define MONS_PER_YEAR	MONSPERYEAR#endif /* !defined USG */#endif /* !defined TZFILE_H */#include "fcntl.h"/*** SunOS 4.1.1 headers lack O_BINARY.*/#ifdef O_BINARY#define OPEN_MODE	(O_RDONLY | O_BINARY)#endif /* defined O_BINARY */#ifndef O_BINARY#define OPEN_MODE	O_RDONLY#endif /* !defined O_BINARY */#ifndef WILDABBR/*** Someone might make incorrect use of a time zone abbreviation:**	1.	They might reference tzname[0] before calling tzset (explicitly**		or implicitly).**	2.	They might reference tzname[1] before calling tzset (explicitly**		or implicitly).**	3.	They might reference tzname[1] after setting to a time zone**		in which Daylight Saving Time is never observed.**	4.	They might reference tzname[0] after setting to a time zone**		in which Standard Time is never observed.**	5.	They might reference tm.TM_ZONE after calling offtime.** What's best to do in the above cases is open to debate;** for now, we just set things up so that in any of the five cases** WILDABBR is used.  Another possibility:  initialize tzname[0] to the** string "tzname[0] used before set", and similarly for the other cases.** And another:  initialize tzname[0] to "ERA", with an explanation in the** manual page of what this "time zone abbreviation" means (doing this so** that tzname[0] has the "normal" length of three characters).*/#define WILDABBR	"   "#endif /* !defined WILDABBR */static char wildabbr[] NO_COPY = WILDABBR;static char gmt[] NO_COPY = "GMT";struct ttinfo {				/* time type information */	long		tt_gmtoff;	/* UTC offset in seconds */	int		tt_isdst;	/* used to set tm_isdst */	int		tt_abbrind;	/* abbreviation list index */	int		tt_ttisstd;	/* TRUE if transition is std time */	int		tt_ttisgmt;	/* TRUE if transition is UTC */};struct lsinfo {				/* leap second information */	time_t		ls_trans;	/* transition time */	long		ls_corr;	/* correction to apply */};#define BIGGEST(a, b)	(((a) > (b)) ? (a) : (b))#ifdef TZNAME_MAX#define MY_TZNAME_MAX	TZNAME_MAX#endif /* defined TZNAME_MAX */#ifndef TZNAME_MAX#define MY_TZNAME_MAX	255#endif /* !defined TZNAME_MAX */struct state {	int		leapcnt;	int		timecnt;	int		typecnt;	int		charcnt;	time_t		ats[TZ_MAX_TIMES];	unsigned char	types[TZ_MAX_TIMES];	struct ttinfo	ttis[TZ_MAX_TYPES];	char		chars[BIGGEST(BIGGEST(TZ_MAX_CHARS + 1, sizeof gmt),				(2 * (MY_TZNAME_MAX + 1)))];	struct lsinfo	lsis[TZ_MAX_LEAPS];};struct rule {	int		r_type;		/* type of rule--see below */	int		r_day;		/* day number of rule */	int		r_week;		/* week number of rule */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -