Diff for /libelwix/src/time.c between versions 1.1.2.5 and 1.6

version 1.1.2.5, 2013/03/07 15:56:22 version 1.6, 2023/03/14 22:36:13
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 - 2022
         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 260  time_Parse(const char *csTime) Line 260  time_Parse(const char *csTime)
         if ((tim = timegm(&tm)) == (time_t) -1)          if ((tim = timegm(&tm)) == (time_t) -1)
                 elwix_SetErr(EINVAL, "Invalid date/time format");                  elwix_SetErr(EINVAL, "Invalid date/time format");
         return tim;          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 };
   
   #ifndef CLOCK_UPTIME_PRECISE
   #define CLOCK_UPTIME_PRECISE    CLOCK_MONOTONIC
   #endif
           clock_gettime(CLOCK_UPTIME_PRECISE, &ts);
   
           return ((uint64_t) ts.tv_sec * 1000000000 + ts.tv_nsec);
   #endif
 }  }

Removed from v.1.1.2.5  
changed lines
  Added in v.1.6


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