From 492ce95d9f6149137cb5b63c55cf2b3cdbe51e5e Mon Sep 17 00:00:00 2001 From: Greg Hackmann Date: Fri, 21 Jun 2013 13:02:38 -0700 Subject: [PATCH] bionic: store property names as variable-length strings Names are immutable, so the fixed-sized arrays can be replaced with variable-length ones to save memory (especially on internal tree nodes). Change-Id: Iee77874b4b55b0f9c5e531d1334be7f7f40086d2 Signed-off-by: Greg Hackmann --- libc/bionic/system_properties.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libc/bionic/system_properties.c b/libc/bionic/system_properties.c index f9671c636..481e6ae45 100644 --- a/libc/bionic/system_properties.c +++ b/libc/bionic/system_properties.c @@ -66,9 +66,9 @@ struct prop_area { typedef struct prop_area prop_area; struct prop_info { - char name[PROP_NAME_MAX]; unsigned volatile serial; char value[PROP_VALUE_MAX]; + char name[0]; }; typedef struct prop_info prop_info; @@ -92,7 +92,6 @@ typedef struct prop_info prop_info; typedef volatile uint32_t prop_off_t; struct prop_bt { - char name[PROP_NAME_MAX]; uint8_t namelen; uint8_t reserved[3]; @@ -102,6 +101,8 @@ struct prop_bt { prop_off_t right; prop_off_t children; + + char name[0]; }; typedef struct prop_bt prop_bt; @@ -277,7 +278,7 @@ static void *new_prop_obj(size_t size, prop_off_t *off) static prop_bt *new_prop_bt(const char *name, uint8_t namelen, prop_off_t *off) { prop_off_t off_tmp; - prop_bt *bt = new_prop_obj(sizeof(prop_bt), &off_tmp); + prop_bt *bt = new_prop_obj(sizeof(prop_bt) + namelen + 1, &off_tmp); if (bt) { memcpy(bt->name, name, namelen); bt->name[namelen] = '\0'; @@ -293,7 +294,7 @@ static prop_info *new_prop_info(const char *name, uint8_t namelen, const char *value, uint8_t valuelen, prop_off_t *off) { prop_off_t off_tmp; - prop_info *info = new_prop_obj(sizeof(prop_info), &off_tmp); + prop_info *info = new_prop_obj(sizeof(prop_info) + namelen + 1, &off_tmp); if (info) { memcpy(info->name, name, namelen); info->name[namelen] = '\0'; -- 2.11.0