| /* getprop.c - Get an Android system property |
| * |
| * Copyright 2015 The Android Open Source Project |
| |
| USE_GETPROP(NEWTOY(getprop, ">2", TOYFLAG_USR|TOYFLAG_SBIN)) |
| |
| config GETPROP |
| bool "getprop" |
| default y |
| depends on TOYBOX_ON_ANDROID |
| help |
| usage: getprop [NAME [DEFAULT]] |
| |
| Gets an Android system property, or lists them all. |
| */ |
| |
| #define FOR_getprop |
| #include "toys.h" |
| |
| #if defined(__ANDROID__) |
| |
| #include <cutils/properties.h> |
| |
| GLOBALS( |
| size_t size; |
| char **nv; // name/value pairs: even=name, odd=value |
| ) |
| |
| static void add_property(char *name, char *value, void *unused) |
| { |
| if (!(TT.size&31)) TT.nv = xrealloc(TT.nv, (TT.size+32)*2*sizeof(char *)); |
| |
| TT.nv[2*TT.size] = xstrdup(name); |
| TT.nv[1+2*TT.size++] = xstrdup(value); |
| } |
| |
| void getprop_main(void) |
| { |
| if (*toys.optargs) { |
| property_get(*toys.optargs, toybuf, toys.optargs[1] ? toys.optargs[1] : ""); |
| puts(toybuf); |
| } else { |
| size_t i; |
| |
| if (property_list((void *)add_property, 0)) error_exit("property_list"); |
| qsort(TT.nv, TT.size, 2*sizeof(char *), qstrcmp); |
| for (i = 0; i<TT.size; i++) printf("[%s]: [%s]\n", TT.nv[i*2],TT.nv[1+i*2]); |
| if (CFG_TOYBOX_FREE) free(TT.nv); |
| } |
| } |
| |
| #else |
| |
| void getprop_main(void) |
| { |
| } |
| |
| #endif |