added qse_str_to_ntime() and similar functions.
relocated cli error codes into the new enum type qse_cli_error_code_t
This commit is contained in:
		| @ -25,6 +25,8 @@ | ||||
|  */ | ||||
|  | ||||
| #include <qse/cmn/time.h> | ||||
|  | ||||
| #include <qse/cmn/chr.h> | ||||
| #include "mem-prv.h" | ||||
|  | ||||
| #if defined(_WIN32) | ||||
| @ -613,3 +615,103 @@ void qse_subtime (const qse_ntime_t* x, const qse_ntime_t* y, qse_ntime_t* z) | ||||
| 		z->nsec = z->nsec + QSE_NSECS_PER_SEC; | ||||
| 	} | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| int qse_mbs_to_ntime (const qse_mchar_t* text, qse_ntime_t* ntime) | ||||
| { | ||||
| 	const qse_mchar_t* p = text, * cp; | ||||
| 	qse_ntime_t tv = { 0, 0 }; | ||||
| 	int neg = 0; | ||||
|  | ||||
| 	if (*p == QSE_MT('-'))  | ||||
| 	{ | ||||
| 		neg = 1; | ||||
| 		p++; | ||||
| 	} | ||||
| 	else if (*p == QSE_MT('+')) | ||||
| 	{ | ||||
| 		p++; | ||||
| 	} | ||||
|  | ||||
| 	cp = p; | ||||
| 	while (QSE_ISMDIGIT(*p)) | ||||
| 	{ | ||||
| 		qse_long_t oldsec = tv.sec; | ||||
| 		tv.sec = tv.sec * 10 + (*p - QSE_MT('0')); | ||||
| 		if (tv.sec < oldsec) return -1; /* overflow? */ | ||||
| 		p++; | ||||
| 	} | ||||
| 	if (cp == p) return -1; | ||||
|  | ||||
| 	if (*p == QSE_MT('.')) | ||||
| 	{ | ||||
| 		qse_int32_t base = QSE_SEC_TO_NSEC(1); /* 1000000000 */ | ||||
|  | ||||
| 		p++; | ||||
| 		base /= 10; /* the max value is 999999999. 9 digits ony */ | ||||
|  | ||||
| 		while (*p && QSE_ISMDIGIT(*p) && base > 0) | ||||
| 		{ | ||||
| 			tv.nsec += (*p - QSE_MT('0')) * base; | ||||
| 			base /= 10; | ||||
| 			p++; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (*p != QSE_MT('\0')) return -1; | ||||
|  | ||||
| 	if (neg) tv.sec *= -1; | ||||
| 	*ntime = tv; | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| int qse_wcs_to_ntime (const qse_wchar_t* text, qse_ntime_t* ntime) | ||||
| { | ||||
| 	const qse_wchar_t* p = text, * cp; | ||||
| 	qse_ntime_t tv = { 0, 0 }; | ||||
| 	int neg = 0; | ||||
|  | ||||
| 	if (*p == QSE_WT('-'))  | ||||
| 	{ | ||||
| 		neg = 1; | ||||
| 		p++; | ||||
| 	} | ||||
| 	else if (*p == QSE_WT('+')) | ||||
| 	{ | ||||
| 		p++; | ||||
| 	} | ||||
|  | ||||
| 	cp = p; | ||||
| 	while (QSE_ISWDIGIT(*p)) | ||||
| 	{ | ||||
| 		qse_long_t oldsec = tv.sec; | ||||
| 		tv.sec = tv.sec * 10 +  (*p - QSE_WT('0')); | ||||
| 		if (tv.sec < oldsec) return -1; /* overflow? */ | ||||
| 		p++; | ||||
| 	} | ||||
| 	if (cp == p) return -1; | ||||
|  | ||||
| 	if (*p == QSE_WT('.')) | ||||
| 	{ | ||||
| 		qse_int32_t base = QSE_SEC_TO_NSEC(1); /* 1000000000 */ | ||||
|  | ||||
| 		p++; | ||||
| 		base /= 10; /* the max value is 999999999. 9 digits ony */ | ||||
|  | ||||
| 		while (*p && QSE_ISWDIGIT(*p) && base > 0) | ||||
| 		{ | ||||
| 			tv.nsec += (*p - QSE_WT('0')) * base; | ||||
| 			base /= 10; | ||||
| 			p++; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if (*p != QSE_WT('\0')) return -1; | ||||
|  | ||||
| 	if (neg) tv.sec *= -1; | ||||
| 	*ntime = tv; | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user