| #include <stdio.h> |
| #include <stdlib.h> |
| #include <time.h> |
| |
| #include <cutils/properties.h> |
| |
| #include <sys/atomics.h> |
| |
| #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ |
| #include <sys/_system_properties.h> |
| |
| |
| extern prop_area *__system_property_area__; |
| |
| typedef struct pwatch pwatch; |
| |
| struct pwatch |
| { |
| const prop_info *pi; |
| unsigned serial; |
| }; |
| |
| static pwatch watchlist[1024]; |
| |
| static void announce(const prop_info *pi) |
| { |
| char name[PROP_NAME_MAX]; |
| char value[PROP_VALUE_MAX]; |
| char *x; |
| |
| __system_property_read(pi, name, value); |
| |
| for(x = value; *x; x++) { |
| if((*x < 32) || (*x > 127)) *x = '.'; |
| } |
| |
| fprintf(stderr,"%10d %s = '%s'\n", (int) time(0), name, value); |
| } |
| |
| int watchprops_main(int argc, char *argv[]) |
| { |
| prop_area *pa = __system_property_area__; |
| unsigned serial = pa->serial; |
| unsigned count = pa->count; |
| unsigned n; |
| |
| if(count >= 1024) exit(1); |
| |
| for(n = 0; n < count; n++) { |
| watchlist[n].pi = __system_property_find_nth(n); |
| watchlist[n].serial = watchlist[n].pi->serial; |
| } |
| |
| for(;;) { |
| do { |
| __futex_wait(&pa->serial, serial, 0); |
| } while(pa->serial == serial); |
| |
| while(count < pa->count){ |
| watchlist[count].pi = __system_property_find_nth(count); |
| watchlist[count].serial = watchlist[n].pi->serial; |
| announce(watchlist[count].pi); |
| count++; |
| if(count == 1024) exit(1); |
| } |
| |
| for(n = 0; n < count; n++){ |
| unsigned tmp = watchlist[n].pi->serial; |
| if(watchlist[n].serial != tmp) { |
| announce(watchlist[n].pi); |
| watchlist[n].serial = tmp; |
| } |
| } |
| } |
| return 0; |
| } |