Minor code improvements
This commit is contained in:
parent
0742901cd2
commit
9fe5f37337
@ -14,6 +14,7 @@ struct prop_t {
|
|||||||
prop_t() = default;
|
prop_t() = default;
|
||||||
prop_t(const char *name) {
|
prop_t(const char *name) {
|
||||||
this->name = strdup(name);
|
this->name = strdup(name);
|
||||||
|
value[0] = '\0';
|
||||||
}
|
}
|
||||||
prop_t(const char *name, const char *value) {
|
prop_t(const char *name, const char *value) {
|
||||||
this->name = strdup(name);
|
this->name = strdup(name);
|
||||||
@ -36,8 +37,7 @@ struct prop_t {
|
|||||||
struct read_cb_t {
|
struct read_cb_t {
|
||||||
void (*cb)(const char *, const char *, void *);
|
void (*cb)(const char *, const char *, void *);
|
||||||
void *arg;
|
void *arg;
|
||||||
read_cb_t() = default;
|
read_cb_t(void (*cb)(const char *, const char *, void *) = nullptr, void *arg = nullptr)
|
||||||
read_cb_t(void (*cb)(const char *, const char *, void *), void *arg)
|
|
||||||
: cb(cb), arg(arg) {}
|
: cb(cb), arg(arg) {}
|
||||||
void exec(const char *name, const char *value) {
|
void exec(const char *name, const char *value) {
|
||||||
cb(name, value, arg);
|
cb(name, value, arg);
|
||||||
@ -49,7 +49,7 @@ struct read_cb_t {
|
|||||||
extern bool use_pb;
|
extern bool use_pb;
|
||||||
|
|
||||||
char *persist_getprop(const char *name);
|
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);
|
bool persist_deleteprop(const char *name);
|
||||||
void collect_props(const char *name, const char *value, void *v_plist);
|
void collect_props(const char *name, const char *value, void *v_plist);
|
||||||
|
|
||||||
|
@ -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) {
|
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';
|
name[stream->bytes_left] = '\0';
|
||||||
if (!pb_read(stream, name, stream->bytes_left))
|
if (!pb_read(stream, name, stream->bytes_left))
|
||||||
return false;
|
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))
|
if (!pb_decode(stream, PersistentProperties_PersistentPropertyRecord_fields, &prop))
|
||||||
return false;
|
return false;
|
||||||
((read_cb_t *) *arg)->exec((const char *) prop.name.arg, prop.value);
|
((read_cb_t *) *arg)->exec((const char *) prop.name.arg, prop.value);
|
||||||
|
delete[] (pb_byte_t *) prop.name.arg;
|
||||||
return true;
|
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) {
|
static void pb_getprop_cb(const char *name, const char *value, void *v) {
|
||||||
struct prop_t *prop = static_cast<prop_t *>(v);
|
struct prop_t *prop = static_cast<prop_t *>(v);
|
||||||
if (prop->name && strcmp(name, prop->name) == 0) {
|
if (prop->name && strcmp(name, prop->name) == 0)
|
||||||
strcpy(prop->value, value);
|
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");
|
LOGD("resetprop: decode with protobuf [" PERSISTENT_PROPERTY_DIR "/persistent_properties]\n");
|
||||||
PersistentProperties props = {};
|
PersistentProperties props = {};
|
||||||
props.properties.funcs.decode = prop_decode;
|
props.properties.funcs.decode = prop_decode;
|
||||||
props.properties.arg = read_cb;
|
props.properties.arg = read_cb;
|
||||||
uint8_t *buf;
|
pb_byte_t *buf;
|
||||||
size_t size;
|
size_t size;
|
||||||
mmap_ro(PERSISTENT_PROPERTY_DIR "/persistent_properties", (void **) &buf, &size);
|
mmap_ro(PERSISTENT_PROPERTY_DIR "/persistent_properties", (void **) &buf, &size);
|
||||||
pb_istream_t stream = pb_istream_from_buffer(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);
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
void persist_getprop_all(read_cb_t *read_cb) {
|
void persist_getprop(read_cb_t *read_cb) {
|
||||||
if (use_pb) {
|
if (use_pb) {
|
||||||
pb_getprop_all(read_cb);
|
pb_getprop(read_cb);
|
||||||
} else {
|
} else {
|
||||||
DIR *dir = opendir(PERSISTENT_PROPERTY_DIR);
|
DIR *dir = opendir(PERSISTENT_PROPERTY_DIR);
|
||||||
struct dirent *entry;
|
struct dirent *entry;
|
||||||
@ -195,9 +193,9 @@ void persist_getprop_all(read_cb_t *read_cb) {
|
|||||||
char *persist_getprop(const char *name) {
|
char *persist_getprop(const char *name) {
|
||||||
prop_t prop(name);
|
prop_t prop(name);
|
||||||
if (use_pb) {
|
if (use_pb) {
|
||||||
struct read_cb_t read_cb(pb_getprop_cb, &prop);
|
read_cb_t read_cb(pb_getprop_cb, &prop);
|
||||||
pb_getprop_all(&read_cb);
|
pb_getprop(&read_cb);
|
||||||
if (prop.name == nullptr)
|
if (prop.value[0])
|
||||||
return strdup(prop.value);
|
return strdup(prop.value);
|
||||||
} else {
|
} else {
|
||||||
// Try to read from file
|
// Try to read from file
|
||||||
@ -211,9 +209,9 @@ char *persist_getprop(const char *name) {
|
|||||||
|
|
||||||
bool persist_deleteprop(const char *name) {
|
bool persist_deleteprop(const char *name) {
|
||||||
if (use_pb) {
|
if (use_pb) {
|
||||||
auto prop_list = Array<prop_t>();
|
Array<prop_t> prop_list;
|
||||||
struct read_cb_t read_cb(collect_props, &prop_list);
|
read_cb_t read_cb(collect_props, &prop_list);
|
||||||
persist_getprop_all(&read_cb);
|
persist_getprop(&read_cb);
|
||||||
|
|
||||||
for (auto it = prop_list.begin(); it != prop_list.end(); ++it) {
|
for (auto it = prop_list.begin(); it != prop_list.end(); ++it) {
|
||||||
if (strcmp((*it).name, name) == 0) {
|
if (strcmp((*it).name, name) == 0) {
|
||||||
|
@ -113,7 +113,7 @@ static int init_resetprop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void print_props(bool persist) {
|
static void print_props(bool persist) {
|
||||||
auto prop_list = Array<prop_t>();
|
Array<prop_t> prop_list;
|
||||||
getprop(collect_props, &prop_list, persist);
|
getprop(collect_props, &prop_list, persist);
|
||||||
prop_list.sort();
|
prop_list.sort();
|
||||||
for (auto &prop : prop_list)
|
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);
|
__system_property_foreach(read_props, &read_cb);
|
||||||
if (persist) {
|
if (persist) {
|
||||||
read_cb.cb = collect_unique_props;
|
read_cb.cb = collect_unique_props;
|
||||||
persist_getprop_all(&read_cb);
|
persist_getprop(&read_cb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,9 +69,11 @@ public:
|
|||||||
T& operator = (const T& a) {
|
T& operator = (const T& a) {
|
||||||
_size = a._size;
|
_size = a._size;
|
||||||
_capacity = a._capacity;
|
_capacity = a._capacity;
|
||||||
_data = new T[_capacity];
|
if (_capacity) {
|
||||||
for(int i = 0; i < _size; ++i)
|
_data = new T[_capacity];
|
||||||
_data[i] = (T&&) a[i];
|
for(int i = 0; i < _size; ++i)
|
||||||
|
_data[i] = (T&&) a[i];
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user