From 9fe5f37337c539efd858ab39ea61c21c6190f54e Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Mon, 5 Nov 2018 14:37:47 -0500 Subject: [PATCH] Minor code improvements --- native/jni/resetprop/_resetprop.h | 6 ++--- native/jni/resetprop/persist_properties.cpp | 28 ++++++++++----------- native/jni/resetprop/resetprop.cpp | 4 +-- native/jni/utils/include/array.h | 8 +++--- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/native/jni/resetprop/_resetprop.h b/native/jni/resetprop/_resetprop.h index 7984909b7..2ef3aef92 100644 --- a/native/jni/resetprop/_resetprop.h +++ b/native/jni/resetprop/_resetprop.h @@ -14,6 +14,7 @@ struct prop_t { prop_t() = default; prop_t(const char *name) { this->name = strdup(name); + value[0] = '\0'; } prop_t(const char *name, const char *value) { this->name = strdup(name); @@ -36,8 +37,7 @@ struct prop_t { struct read_cb_t { void (*cb)(const char *, const char *, void *); void *arg; - read_cb_t() = default; - read_cb_t(void (*cb)(const char *, const char *, void *), void *arg) + read_cb_t(void (*cb)(const char *, const char *, void *) = nullptr, void *arg = nullptr) : cb(cb), arg(arg) {} void exec(const char *name, const char *value) { cb(name, value, arg); @@ -49,7 +49,7 @@ struct read_cb_t { extern bool use_pb; char *persist_getprop(const char *name); -void persist_getprop_all(read_cb_t *read_cb); +void persist_getprop(read_cb_t *read_cb); bool persist_deleteprop(const char *name); void collect_props(const char *name, const char *value, void *v_plist); diff --git a/native/jni/resetprop/persist_properties.cpp b/native/jni/resetprop/persist_properties.cpp index 889a14c8f..60164c283 100644 --- a/native/jni/resetprop/persist_properties.cpp +++ b/native/jni/resetprop/persist_properties.cpp @@ -87,7 +87,7 @@ const pb_field_t PersistentProperties_fields[2] = { * ***************************/ static bool name_decode(pb_istream_t *stream, const pb_field_t *field, void **arg) { - uint8_t *name = (uint8_t *) xmalloc(stream->bytes_left + 1); + auto name = new pb_byte_t[stream->bytes_left + 1]; name[stream->bytes_left] = '\0'; if (!pb_read(stream, name, stream->bytes_left)) return false; @@ -106,6 +106,7 @@ static bool prop_decode(pb_istream_t *stream, const pb_field_t *field, void **ar if (!pb_decode(stream, PersistentProperties_PersistentPropertyRecord_fields, &prop)) return false; ((read_cb_t *) *arg)->exec((const char *) prop.name.arg, prop.value); + delete[] (pb_byte_t *) prop.name.arg; return true; } @@ -143,19 +144,16 @@ static pb_ostream_t create_ostream(const char *filename) { static void pb_getprop_cb(const char *name, const char *value, void *v) { struct prop_t *prop = static_cast(v); - if (prop->name && strcmp(name, prop->name) == 0) { + if (prop->name && strcmp(name, prop->name) == 0) strcpy(prop->value, value); - free(prop->name); - prop->name = nullptr; - } } -static void pb_getprop_all(read_cb_t *read_cb) { +static void pb_getprop(read_cb_t *read_cb) { LOGD("resetprop: decode with protobuf [" PERSISTENT_PROPERTY_DIR "/persistent_properties]\n"); PersistentProperties props = {}; props.properties.funcs.decode = prop_decode; props.properties.arg = read_cb; - uint8_t *buf; + pb_byte_t *buf; size_t size; mmap_ro(PERSISTENT_PROPERTY_DIR "/persistent_properties", (void **) &buf, &size); pb_istream_t stream = pb_istream_from_buffer(buf, size); @@ -175,9 +173,9 @@ static void file_getprop(const char *name, char *value) { close(fd); } -void persist_getprop_all(read_cb_t *read_cb) { +void persist_getprop(read_cb_t *read_cb) { if (use_pb) { - pb_getprop_all(read_cb); + pb_getprop(read_cb); } else { DIR *dir = opendir(PERSISTENT_PROPERTY_DIR); struct dirent *entry; @@ -195,9 +193,9 @@ void persist_getprop_all(read_cb_t *read_cb) { char *persist_getprop(const char *name) { prop_t prop(name); if (use_pb) { - struct read_cb_t read_cb(pb_getprop_cb, &prop); - pb_getprop_all(&read_cb); - if (prop.name == nullptr) + read_cb_t read_cb(pb_getprop_cb, &prop); + pb_getprop(&read_cb); + if (prop.value[0]) return strdup(prop.value); } else { // Try to read from file @@ -211,9 +209,9 @@ char *persist_getprop(const char *name) { bool persist_deleteprop(const char *name) { if (use_pb) { - auto prop_list = Array(); - struct read_cb_t read_cb(collect_props, &prop_list); - persist_getprop_all(&read_cb); + Array prop_list; + read_cb_t read_cb(collect_props, &prop_list); + persist_getprop(&read_cb); for (auto it = prop_list.begin(); it != prop_list.end(); ++it) { if (strcmp((*it).name, name) == 0) { diff --git a/native/jni/resetprop/resetprop.cpp b/native/jni/resetprop/resetprop.cpp index bd455cfab..466b3cac9 100644 --- a/native/jni/resetprop/resetprop.cpp +++ b/native/jni/resetprop/resetprop.cpp @@ -113,7 +113,7 @@ static int init_resetprop() { } static void print_props(bool persist) { - auto prop_list = Array(); + Array prop_list; getprop(collect_props, &prop_list, persist); prop_list.sort(); for (auto &prop : prop_list) @@ -159,7 +159,7 @@ void getprop(void (*callback)(const char *, const char *, void *), void *cookie, __system_property_foreach(read_props, &read_cb); if (persist) { read_cb.cb = collect_unique_props; - persist_getprop_all(&read_cb); + persist_getprop(&read_cb); } } diff --git a/native/jni/utils/include/array.h b/native/jni/utils/include/array.h index d296895e1..5d83defeb 100644 --- a/native/jni/utils/include/array.h +++ b/native/jni/utils/include/array.h @@ -69,9 +69,11 @@ public: T& operator = (const T& a) { _size = a._size; _capacity = a._capacity; - _data = new T[_capacity]; - for(int i = 0; i < _size; ++i) - _data[i] = (T&&) a[i]; + if (_capacity) { + _data = new T[_capacity]; + for(int i = 0; i < _size; ++i) + _data[i] = (T&&) a[i]; + } return *this; }