Home | History | Annotate | Download | only in toolbox
      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <time.h>
      4 
      5 #include <cutils/properties.h>
      6 
      7 #include <sys/atomics.h>
      8 
      9 #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
     10 #include <sys/_system_properties.h>
     11 
     12 
     13 extern prop_area *__system_property_area__;
     14 
     15 typedef struct pwatch pwatch;
     16 
     17 struct pwatch
     18 {
     19     const prop_info *pi;
     20     unsigned serial;
     21 };
     22 
     23 static pwatch watchlist[1024];
     24 
     25 static void announce(const prop_info *pi)
     26 {
     27     char name[PROP_NAME_MAX];
     28     char value[PROP_VALUE_MAX];
     29     char *x;
     30 
     31     __system_property_read(pi, name, value);
     32 
     33     for(x = value; *x; x++) {
     34         if((*x < 32) || (*x > 127)) *x = '.';
     35     }
     36 
     37     fprintf(stderr,"%10d %s = '%s'\n", (int) time(0), name, value);
     38 }
     39 
     40 int watchprops_main(int argc, char *argv[])
     41 {
     42     prop_area *pa = __system_property_area__;
     43     unsigned serial = pa->serial;
     44     unsigned count = pa->count;
     45     unsigned n;
     46 
     47     if(count >= 1024) exit(1);
     48 
     49     for(n = 0; n < count; n++) {
     50         watchlist[n].pi = __system_property_find_nth(n);
     51         watchlist[n].serial = watchlist[n].pi->serial;
     52     }
     53 
     54     for(;;) {
     55         do {
     56             __futex_wait(&pa->serial, serial, 0);
     57         } while(pa->serial == serial);
     58 
     59         while(count < pa->count){
     60             watchlist[count].pi = __system_property_find_nth(count);
     61             watchlist[count].serial = watchlist[n].pi->serial;
     62             announce(watchlist[count].pi);
     63             count++;
     64             if(count == 1024) exit(1);
     65         }
     66 
     67         for(n = 0; n < count; n++){
     68             unsigned tmp = watchlist[n].pi->serial;
     69             if(watchlist[n].serial != tmp) {
     70                 announce(watchlist[n].pi);
     71                 watchlist[n].serial = tmp;
     72             }
     73         }
     74     }
     75     return 0;
     76 }
     77