[BACK]Return to kstat.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / kstat

Diff for /src/usr.bin/kstat/kstat.c between version 1.11 and 1.12

version 1.11, 2022/07/10 19:51:37 version 1.12, 2023/11/16 02:45:54
Line 52 
Line 52 
 #define SET(_i, _m)             ((_i) |= (_m))  #define SET(_i, _m)             ((_i) |= (_m))
 #endif  #endif
   
   struct fmt_result {
           uint64_t                val;
           unsigned int            frac;
           unsigned int            exp;
   };
   
   static void
   fmt_thing(struct fmt_result *fr, uint64_t val, uint64_t chunk)
   {
           unsigned int exp = 0;
           uint64_t rem = 0;
   
           while (val > chunk) {
                   rem = val % chunk;
                   val /= chunk;
                   exp++;
           }
   
           fr->val = val;
           fr->exp = exp;
           fr->frac = (rem * 1000) / chunk;
   }
   
 #define str_is_empty(_str)      (*(_str) == '\0')  #define str_is_empty(_str)      (*(_str) == '\0')
   
 #define DEV_KSTAT "/dev/kstat"  #define DEV_KSTAT "/dev/kstat"
Line 351 
Line 374 
         printf("\n");          printf("\n");
 }  }
   
   static const char *si_prefixes[] = { "", "k", "M", "G", "T", "P", "E" };
   #ifdef notyet
   static const char *iec_prefixes[] = { "", "Ki", "Mi", "Gi", "Ti", "Pi", "Ei" };
   #endif
   
 static void  static void
 kstat_kv(const void *d, ssize_t len)  kstat_kv(const void *d, ssize_t len)
 {  {
Line 359 
Line 387 
         ssize_t blen;          ssize_t blen;
         void (*trailer)(const void *, size_t);          void (*trailer)(const void *, size_t);
         double f;          double f;
           struct fmt_result fr;
   
         if (len < (ssize_t)sizeof(*kv)) {          if (len < (ssize_t)sizeof(*kv)) {
                 warn("short kv (len %zu < size %zu)", len, sizeof(*kv));                  warn("short kv (len %zu < size %zu)", len, sizeof(*kv));
Line 423 
Line 452 
                 case KSTAT_KV_T_TEMP:                  case KSTAT_KV_T_TEMP:
                         f = kstat_kv_temp(kv);                          f = kstat_kv_temp(kv);
                         printf("%.2f degC", (f - 273150000.0) / 1000000.0);                          printf("%.2f degC", (f - 273150000.0) / 1000000.0);
                           break;
   
                   case KSTAT_KV_T_FREQ:
                           fmt_thing(&fr, kstat_kv_freq(kv), 1000);
                           printf("%llu", fr.val);
                           if (fr.frac > 10)
                                   printf(".%02u", fr.frac / 10);
                           printf(" %sHz", si_prefixes[fr.exp]);
                           break;
   
                   case KSTAT_KV_T_VOLTS_DC: /* uV */
                           f = kstat_kv_volts(kv);
                           printf("%.2f VDC", f / 1000000.0);
                           break;
   
                   case KSTAT_KV_T_VOLTS_AC: /* uV */
                           f = kstat_kv_volts(kv);
                           printf("%.2f VAC", f / 1000000.0);
                         break;                          break;
   
                 default:                  default:

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12