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