|
version 1.1.2.4, 2013/03/07 15:49:27
|
version 1.4, 2014/01/29 14:16:54
|
|
Line 12 terms:
|
Line 12 terms:
|
| All of the documentation and software included in the ELWIX and AITNET |
All of the documentation and software included in the ELWIX and AITNET |
| Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org> |
| |
|
| Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 | Copyright 2004 - 2014 |
| by Michael Pounov <misho@elwix.org>. All rights reserved. |
by Michael Pounov <misho@elwix.org>. All rights reserved. |
| |
|
| Redistribution and use in source and binary forms, with or without |
Redistribution and use in source and binary forms, with or without |
|
Line 83 stridx_compare(struct stridx * __restrict a, struct st
|
Line 83 stridx_compare(struct stridx * __restrict a, struct st
|
| } |
} |
| |
|
| static int |
static int |
| search4month(char * __restrict psMonth, int * __restrict id) | search4month(char * psMonth, int * __restrict id) |
| { |
{ |
| static int sorted = 0; |
static int sorted = 0; |
| struct stridx *el; | struct stridx *el, item = { psMonth, 0 }; |
| |
|
| if (!psMonth) |
if (!psMonth) |
| return -1; |
return -1; |
|
Line 98 search4month(char * __restrict psMonth, int * __restri
|
Line 98 search4month(char * __restrict psMonth, int * __restri
|
| } |
} |
| |
|
| str_Lower(psMonth); |
str_Lower(psMonth); |
| el = bsearch(psMonth, months, sizeof(months) / sizeof(struct stridx), sizeof(struct stridx), | el = bsearch(&item, months, sizeof(months) / sizeof(struct stridx), sizeof(struct stridx), |
| (int (*)(const void*, const void*)) stridx_compare); |
(int (*)(const void*, const void*)) stridx_compare); |
| if (el && id) |
if (el && id) |
| *id = el->id; |
*id = el->id; |
|
Line 110 static int
|
Line 110 static int
|
| search4wday(char * __restrict psWDay, int * __restrict id) |
search4wday(char * __restrict psWDay, int * __restrict id) |
| { |
{ |
| static int sorted = 0; |
static int sorted = 0; |
| struct stridx *el; | struct stridx *el, item = { psWDay, 0 }; |
| |
|
| if (!psWDay) |
if (!psWDay) |
| return -1; |
return -1; |
|
Line 122 search4wday(char * __restrict psWDay, int * __restrict
|
Line 122 search4wday(char * __restrict psWDay, int * __restrict
|
| } |
} |
| |
|
| str_Lower(psWDay); |
str_Lower(psWDay); |
| el = bsearch(psWDay, wdays, sizeof(wdays) / sizeof(struct stridx), sizeof(struct stridx), | el = bsearch(&item, wdays, sizeof(wdays) / sizeof(struct stridx), sizeof(struct stridx), |
| (int (*)(const void*, const void*)) stridx_compare); |
(int (*)(const void*, const void*)) stridx_compare); |
| if (el && id) |
if (el && id) |
| *id = el->id; |
*id = el->id; |
|
Line 247 time_Parse(const char *csTime)
|
Line 247 time_Parse(const char *csTime)
|
| tm.tm_min = tm_min; |
tm.tm_min = tm_min; |
| tm.tm_sec = tm_sec; |
tm.tm_sec = tm_sec; |
| tm.tm_year = tm_year; |
tm.tm_year = tm_year; |
| } else | } else { |
| | elwix_SetErr(EINVAL, "Invalid date/time format"); |
| return (time_t) -1; |
return (time_t) -1; |
| |
} |
| |
|
| if (tm.tm_year > 1900) |
if (tm.tm_year > 1900) |
| tm.tm_year -= 1900; |
tm.tm_year -= 1900; |
| else if (tm.tm_year < 70) |
else if (tm.tm_year < 70) |
| tm.tm_year += 100; |
tm.tm_year += 100; |
| |
|
| return timegm(&tm); | if ((tim = timegm(&tm)) == (time_t) -1) |
| | elwix_SetErr(EINVAL, "Invalid date/time format"); |
| | return tim; |
| | } |
| | |
| | /* |
| | * time_rdtsc() - Get TSC timer value from CPU |
| | * |
| | * return: TSC in nanoseconds |
| | */ |
| | uint64_t |
| | time_rdtsc(void) |
| | { |
| | #if defined(i386) || defined(__i386__) |
| | /* i386 */ |
| | uint32_t hi, lo; |
| | |
| | asm volatile("rdtsc" : "=d" (hi), "=a" (lo)); |
| | return (((uint64_t) hi << 32) | (uint64_t) lo); |
| | #elif defined(amd64) || defined(__amd64__) || \ |
| | defined(x86_64) || defined(__x86_64__) |
| | /* amd64 */ |
| | uint64_t res; |
| | |
| | asm volatile("rdtsc" : "=a" (res)); |
| | return res; |
| | #else |
| | /* unsupported for this architecture, get time by ordinary way */ |
| | struct timespec ts = { 0, 0LL }; |
| | |
| | clock_gettime(CLOCK_UPTIME_PRECISE, &ts); |
| | return ((uint64_t) ts.tv_sec * 1000000000 + ts.tv_nsec); |
| | #endif |
| } |
} |