12e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes/* getprop.c - Get an Android system property 22e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes * 32e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes * Copyright 2015 The Android Open Source Project 42e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 52e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott HughesUSE_GETPROP(NEWTOY(getprop, ">2", TOYFLAG_USR|TOYFLAG_SBIN)) 62e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 72e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughesconfig GETPROP 82e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes bool "getprop" 92e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes default y 105b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley depends on TOYBOX_ON_ANDROID 112e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes help 122e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes usage: getprop [NAME [DEFAULT]] 132e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 142e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes Gets an Android system property, or lists them all. 152e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes*/ 162e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 172e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes#define FOR_getprop 182e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes#include "toys.h" 192e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 202e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes#if defined(__ANDROID__) 212e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 222e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes#include <cutils/properties.h> 232e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 242e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott HughesGLOBALS( 252e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes size_t size; 265b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley char **nv; // name/value pairs: even=name, odd=value 272e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes) 282e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 295b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landleystatic void add_property(char *name, char *value, void *unused) 302e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes{ 315b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley if (!(TT.size&31)) TT.nv = xrealloc(TT.nv, (TT.size+32)*2*sizeof(char *)); 322e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 335b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley TT.nv[2*TT.size] = xstrdup(name); 345b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley TT.nv[1+2*TT.size++] = xstrdup(value); 352e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes} 362e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 372e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughesvoid getprop_main(void) 382e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes{ 392e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes if (*toys.optargs) { 405b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley property_get(*toys.optargs, toybuf, toys.optargs[1] ? toys.optargs[1] : ""); 415b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley puts(toybuf); 422e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes } else { 432e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes size_t i; 442e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 452a7727dec265fa96e8522b0a557b72320d2889a7Elliott Hughes if (property_list((void *)add_property, 0)) error_exit("property_list"); 462a7727dec265fa96e8522b0a557b72320d2889a7Elliott Hughes qsort(TT.nv, TT.size, 2*sizeof(char *), qstrcmp); 475b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley for (i = 0; i<TT.size; i++) printf("[%s]: [%s]\n", TT.nv[i*2],TT.nv[1+i*2]); 485b493dc48db03c7e27c8ce002fe216bcd778fe92Rob Landley if (CFG_TOYBOX_FREE) free(TT.nv); 492e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes } 502e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes} 512e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 522e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes#else 532e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 542e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughesvoid getprop_main(void) 552e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes{ 562e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes} 572e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes 582e4c96533c1b7ffb5f303c9589a6b4a1de6be560Elliott Hughes#endif 59