Diff for /libelwix/src/time.c between versions 1.1.2.4 and 1.4

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, 2013Copyright 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
 }  }

Removed from v.1.1.2.4  
changed lines
  Added in v.1.4


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>