util.c

来自「完整的1.0代码」· C语言 代码 · 共 132 行

C
132
字号
/* *  linux/fs/isofs/util.c * *  The special functions in the file are numbered according to the section *  of the iso 9660 standard in which they are described.  isonum_733 will *  convert numbers according to section 7.3.3, etc. * *  isofs special functions.  This file was lifted in its entirety from * the bsd386 iso9660 filesystem, by Pace Williamson. */intisonum_711 (char * p){	return (*p & 0xff);}intisonum_712 (char * p){	int val;		val = *p;	if (val & 0x80)		val |= 0xffffff00;	return (val);}intisonum_721 (char * p){	return ((p[0] & 0xff) | ((p[1] & 0xff) << 8));}intisonum_722 (char * p){	return (((p[0] & 0xff) << 8) | (p[1] & 0xff));}intisonum_723 (char * p){#if 0	if (p[0] != p[3] || p[1] != p[2]) {		fprintf (stderr, "invalid format 7.2.3 number\n");		exit (1);	}#endif	return (isonum_721 (p));}intisonum_731 (char * p){	return ((p[0] & 0xff)		| ((p[1] & 0xff) << 8)		| ((p[2] & 0xff) << 16)		| ((p[3] & 0xff) << 24));}intisonum_732 (char * p){	return (((p[0] & 0xff) << 24)		| ((p[1] & 0xff) << 16)		| ((p[2] & 0xff) << 8)		| (p[3] & 0xff));}intisonum_733 (char * p){#if 0	int i;	for (i = 0; i < 4; i++) {		if (p[i] != p[7-i]) {			fprintf (stderr, "bad format 7.3.3 number\n");			exit (1);		}	}#endif	return (isonum_731 (p));}/* We have to convert from a MM/DD/YY format to the unix ctime format.  We have to   take into account leap years and all of that good stuff.  Unfortunately, the kernel   does not have the information on hand to take into account daylight savings time,   so there will be cases (roughly half the time) where the dates are off by one hour. */int iso_date(char * p, int flag){	int year, month, day, hour ,minute, second, tz;	int crtime, days, i;	year = p[0] - 70;	month = p[1];	day = p[2];	hour = p[3];	minute = p[4];	second = p[5];	if (flag == 0) tz = p[6]; /* High sierra has no time zone */	else tz = 0;		if (year < 0) {		crtime = 0;	} else {		int monlen[12] = {31,28,31,30,31,30,31,31,30,31,30,31};		days = year * 365;		if (year > 2)			days += (year+1) / 4;		for (i = 1; i < month; i++)			days += monlen[i-1];		if (((year+2) % 4) == 0 && month > 2)			days++;		days += day - 1;		crtime = ((((days * 24) + hour) * 60 + minute) * 60)			+ second;				/* sign extend */		if (tz & 0x80)			tz |= (-1 << 8);				/* timezone offset is unreliable on some disks */		if (-48 <= tz && tz <= 52)			crtime += tz * 15 * 60;	}	return crtime;}			

⌨️ 快捷键说明

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