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

📄 rvtimeutil.c

📁 h.248协议源码
💻 C
字号:
#if (0)************************************************************************Filename   : Description:************************************************************************   Copyright (c) 2000 RADVision Inc.   ************************************************************************NOTICE:This document contains information that is proprietary to RADVision LTD.   No part of this publication may be reproduced in any form whatsoever    without written prior approval by RADVision LTD..   RADVision LTD. reserves the right to revise this publication and make    changes without obligation to notify any person of such revisions or    changes.   ************************************************************************   $Revision:$   $Date:$   $Author: Jay Davis$   ************************************************************************#endif/* Parts based on the following public domain software: *//* $FreeBSD: src/lib/libc/stdtime/asctime.c,v 1.8 2001/01/24 13:01:02 deischen Exp $ *//* $FreeBSD: src/lib/libc/stdtime/localtime.c,v 1.27 2001/02/15 22:17:04 tegge Exp $ *//* June 5, 1996 by Arthur David Olson (arthur_david_olson@nih.gov). *//* This file contains primitive versions of gmtime_r and localtime_r (asctime_r *//* is generic). These are for embedded OS's (ie Nucleus) that don't have *//* these standard reentrant functions. Things like leap-seconds are not *//* accounted for and no timezone work is done (localtime = gmtime). *//* Eventually a full set of time functions should be included to handle *//* it all properly for each OS. */#include <stdio.h>#include "rvtimeutil.h"#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))/* Only use for Nucleus, other OS's have their own libs */#if defined(RV_OS_NUCLEUS)static const int mon_lengths[2][MONSPERYEAR] = {	{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },	{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }};static const int year_lengths[2] = {	DAYSPERNYEAR, DAYSPERLYEAR};/*** A la X3J11, with core dump avoidance.*//* result must be at least 26 characters long */char *rvAsctime_r(const RvTm *timeptr, char *result){	static const char wday_name[][4] = {		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"	};	static const char mon_name[][4] = {		"Jan", "Feb", "Mar", "Apr", "May", "Jun",		"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"	};	const char *wn;	const char *mn;	int mday, hour, min, sec, year;	if((timeptr->tm_wday < 0) || (timeptr->tm_wday >= DAYSPERWEEK)) {		wn = "???";	} else wn = wday_name[timeptr->tm_wday];	if((timeptr->tm_mon < 0) || (timeptr->tm_mon >= MONSPERYEAR)) {		mn = "???";	} else mn = mon_name[timeptr->tm_mon];	year = TM_YEAR_BASE + timeptr->tm_year;	mday = timeptr->tm_mday;	hour = timeptr->tm_hour;	min = timeptr->tm_min;	sec = timeptr->tm_sec;		/* Add checks to prevent overruns */	if((timeptr->tm_mday < 0) || (timeptr->tm_mday > 99))		mday = 0;	if((timeptr->tm_hour < 0) || (timeptr->tm_hour > 99))		hour = 0;	if((timeptr->tm_min < 0) || (timeptr->tm_min > 99))		min = 0;	if((timeptr->tm_sec < 0) || (timeptr->tm_sec > 99))		sec = 0;	if((year < 0) || (year > 9999))		year = 0;	/*	** The X3J11-suggested format is	**	"%.3s %.3s%3d %02.2d:%02.2d:%02.2d %d\n"	** Since the .2 in 02.2d is ignored, we drop it.	*/	sprintf(result, "%.3s %.3s%3d %02d:%02d:%02d %d\n", wn, mn,			mday, hour, min, sec, year);	return result;}/* Does not account for leap seconds or anything fancy. IEEE spec *//* even forgot about leap seconds. So we do things the simple way *//* for now */RvTm *rvGmtime_r(RvTime t, RvTm *tm){	int year, month, days, leapyear;	RvTime temp;	temp = t;	tm->tm_sec = temp % SECSPERMIN;	temp = temp/SECSPERMIN;	tm->tm_min = temp % MINSPERHOUR;	temp = temp/MINSPERHOUR;	tm->tm_hour = temp % HOURSPERDAY;	temp = temp / HOURSPERDAY;	tm->tm_wday = (temp + EPOCH_WDAY) % DAYSPERWEEK;	year = EPOCH_YEAR;	for(;;) {		leapyear = isleap(year);		days = year_lengths[leapyear];		if(temp < days) break;		temp -= days;		year++;	}	tm->tm_year = year - TM_YEAR_BASE;	tm->tm_yday = temp;	month = TM_JANUARY;	for(;;) {		days = mon_lengths[leapyear][month];		if(temp < days) break;		temp -= days;		month++;	}	tm->tm_mon = month;	tm->tm_mday = temp + 1;	tm->tm_isdst = 0;	return tm;}RvTm *rvLocaltime_r(RvTime t, RvTm *tm){	/* To do local time, we should find out time zone offset */	/* and subtract it from the gmtime result along with */	/* any offset for daylight savings time if it is in effect */	return rvGmtime_r(t, tm);}#endif

⌨️ 快捷键说明

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