From 31f73712f3107de758a5892ee95815bc891d7107 Mon Sep 17 00:00:00 2001 From: Sebastian Dransfeld Date: Thu, 1 Apr 2010 19:41:03 +0000 Subject: [PATCH] efreet: stringshare SVN revision: 47668 --- legacy/efreet/src/lib/efreet_icon.c | 77 +++++++++++++++-------------- legacy/efreet/src/lib/efreet_icon.h | 10 ++-- legacy/efreet/src/lib/efreet_ini.c | 26 +++++----- 3 files changed, 59 insertions(+), 54 deletions(-) diff --git a/legacy/efreet/src/lib/efreet_icon.c b/legacy/efreet/src/lib/efreet_icon.c index d5360669cd..39f477b6b8 100644 --- a/legacy/efreet/src/lib/efreet_icon.c +++ b/legacy/efreet/src/lib/efreet_icon.c @@ -28,8 +28,8 @@ static Eina_Hash *efreet_icon_cache = NULL; typedef struct Efreet_Icon_Cache Efreet_Icon_Cache; struct Efreet_Icon_Cache { - char *key; - char *path; + const char *key; + const char *path; time_t lasttime; }; @@ -125,7 +125,7 @@ efreet_icon_init(void) /* setup the default extension list */ for (i = 0; default_exts[i] != NULL; i++) - efreet_icon_extensions = eina_list_append(efreet_icon_extensions, strdup(default_exts[i])); + efreet_icon_extensions = eina_list_append(efreet_icon_extensions, eina_stringshare_add(default_exts[i])); efreet_icon_themes = eina_hash_string_superfast_new(EINA_FREE_CB(efreet_icon_theme_free)); @@ -147,7 +147,7 @@ efreet_icon_shutdown(void) IF_FREE(efreet_icon_user_dir); IF_FREE(efreet_icon_deprecated_user_dir); - IF_FREE_LIST(efreet_icon_extensions, free); + IF_FREE_LIST(efreet_icon_extensions, eina_stringshare_del); IF_FREE_HASH(efreet_icon_themes); efreet_extra_icon_dirs = eina_list_free(efreet_extra_icon_dirs); @@ -206,7 +206,7 @@ efreet_icon_user_dir_get(void) EAPI void efreet_icon_extension_add(const char *ext) { - efreet_icon_extensions = eina_list_prepend(efreet_icon_extensions, strdup(ext)); + efreet_icon_extensions = eina_list_prepend(efreet_icon_extensions, eina_stringshare_add(ext)); } /** @@ -955,7 +955,7 @@ efreet_icon_new(const char *path) char *p; icon = NEW(Efreet_Icon, 1); - icon->path = strdup(path); + icon->path = eina_stringshare_add(path); /* load the .icon file if it's available */ p = strrchr(icon->path, '.'); @@ -979,7 +979,7 @@ efreet_icon_new(const char *path) file = ecore_file_file_get(icon->path); p = strrchr(icon->path, '.'); if (p) *p = '\0'; - icon->name = strdup(file); + icon->name = eina_stringshare_add(file); if (p) *p = '.'; } @@ -999,8 +999,8 @@ efreet_icon_free(Efreet_Icon *icon) icon->ref_count --; if (icon->ref_count > 0) return; - IF_FREE(icon->path); - IF_FREE(icon->name); + IF_RELEASE(icon->path); + IF_RELEASE(icon->name); IF_FREE_LIST(icon->attach_points, free); FREE(icon); @@ -1028,7 +1028,7 @@ efreet_icon_populate(Efreet_Icon *icon, const char *file) efreet_ini_section_set(ini, "Icon Data"); tmp = efreet_ini_localestring_get(ini, "DisplayName"); - if (tmp) icon->name = strdup(tmp); + if (tmp) icon->name = eina_stringshare_add(tmp); tmp = efreet_ini_string_get(ini, "EmbeddedTextRectangle"); if (tmp) @@ -1036,8 +1036,11 @@ efreet_icon_populate(Efreet_Icon *icon, const char *file) int points[4]; char *t, *s, *p; int i; + size_t len; - t = strdup(tmp); + len = strlen(tmp) + 1; + t = alloca(len); + memcpy(t, tmp, len); s = t; for (i = 0; i < 4; i++) { @@ -1062,16 +1065,17 @@ efreet_icon_populate(Efreet_Icon *icon, const char *file) icon->embedded_text_rectangle.y0 = points[1]; icon->embedded_text_rectangle.x1 = points[2]; icon->embedded_text_rectangle.y1 = points[3]; - - FREE(t); } tmp = efreet_ini_string_get(ini, "AttachPoints"); if (tmp) { char *t, *s, *p; + size_t len; - t = strdup(tmp); + len = strlen(tmp) + 1; + t = alloca(len); + memcpy(t, tmp, len); s = t; while (s) { @@ -1097,7 +1101,6 @@ efreet_icon_populate(Efreet_Icon *icon, const char *file) if (p) s = ++p; else s = NULL; } - FREE(t); } efreet_ini_free(ini); @@ -1132,11 +1135,11 @@ efreet_icon_theme_free(Efreet_Icon_Theme *theme) IF_RELEASE(theme->name.internal); IF_RELEASE(theme->name.name); - IF_FREE(theme->comment); - IF_FREE(theme->example_icon); + IF_RELEASE(theme->comment); + IF_RELEASE(theme->example_icon); - IF_FREE_LIST(theme->paths, free); - IF_FREE_LIST(theme->inherits, free); + IF_FREE_LIST(theme->paths, eina_stringshare_del); + IF_FREE_LIST(theme->inherits, eina_stringshare_del); IF_FREE_LIST(theme->directories, efreet_icon_theme_directory_free); FREE(theme); @@ -1156,7 +1159,7 @@ efreet_icon_theme_path_add(Efreet_Icon_Theme *theme, const char *path) if (!theme || !path) return; if (!eina_list_search_unsorted(theme->paths, EINA_COMPARE_CB(strcmp), path)) - theme->paths = eina_list_append(theme->paths, strdup(path)); + theme->paths = eina_list_append(theme->paths, eina_stringshare_add(path)); } /** @@ -1356,10 +1359,10 @@ efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path) if (tmp) theme->name.name = eina_stringshare_add(tmp); tmp = efreet_ini_localestring_get(ini, "Comment"); - if (tmp) theme->comment = strdup(tmp); + if (tmp) theme->comment = eina_stringshare_add(tmp); tmp = efreet_ini_string_get(ini, "Example"); - if (tmp) theme->example_icon = strdup(tmp); + if (tmp) theme->example_icon = eina_stringshare_add(tmp); theme->hidden = efreet_ini_boolean_get(ini, "Hidden"); @@ -1370,8 +1373,11 @@ efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path) if (tmp) { char *t, *s, *p; + size_t len; - t = strdup(tmp); + len = strlen(tmp) + 1; + t = alloca(len); + memcpy(t, tmp, len); s = t; p = strchr(s, ','); @@ -1379,13 +1385,11 @@ efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path) { *p = '\0'; - theme->inherits = eina_list_append(theme->inherits, strdup(s)); + theme->inherits = eina_list_append(theme->inherits, eina_stringshare_add(s)); s = ++p; p = strchr(s, ','); } - theme->inherits = eina_list_append(theme->inherits, strdup(s)); - - FREE(t); + theme->inherits = eina_list_append(theme->inherits, eina_stringshare_add(s)); } /* make sure this one is done last as setting the directory will change @@ -1394,8 +1398,11 @@ efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path) if (tmp) { char *t, *s, *p; + size_t len; - t = strdup(tmp); + len = strlen(tmp) + 1; + t = alloca(len); + memcpy(t, tmp, len); s = t; p = s; @@ -1410,8 +1417,6 @@ efreet_icon_theme_index_read(Efreet_Icon_Theme *theme, const char *path) if (p) s = ++p; } - - FREE(t); } efreet_ini_free(ini); @@ -1467,7 +1472,7 @@ efreet_icon_theme_directory_new(Efreet_Ini *ini, const char *name) if (!ini) return NULL; dir = NEW(Efreet_Icon_Theme_Directory, 1); - dir->name = strdup(name); + dir->name = eina_stringshare_add(name); efreet_ini_section_set(ini, name); @@ -1528,7 +1533,7 @@ efreet_icon_theme_directory_free(Efreet_Icon_Theme_Directory *dir) { if (!dir) return; - IF_FREE(dir->name); + IF_RELEASE(dir->name); FREE(dir); } @@ -1567,8 +1572,8 @@ efreet_icon_cache_free(Efreet_Icon_Cache *value) { if (!value) return; - IF_FREE(value->key); - IF_FREE(value->path); + IF_RELEASE(value->key); + IF_RELEASE(value->path); free(value); } @@ -1619,10 +1624,10 @@ efreet_icon_cache_add(Efreet_Icon_Theme *theme, const char *icon, unsigned int s snprintf(key, sizeof(key), "%s %d", icon, size); cache = NEW(Efreet_Icon_Cache, 1); - cache->key = strdup(key); + cache->key = eina_stringshare_add(key); if ((value) && !stat(value, &st)) { - cache->path = strdup(value); + cache->path = eina_stringshare_add(value); cache->lasttime = st.st_mtime; } else diff --git a/legacy/efreet/src/lib/efreet_icon.h b/legacy/efreet/src/lib/efreet_icon.h index f1c687490d..66cd03fad5 100644 --- a/legacy/efreet/src/lib/efreet_icon.h +++ b/legacy/efreet/src/lib/efreet_icon.h @@ -52,8 +52,8 @@ struct Efreet_Icon_Theme const char *name; /**< The user visible name */ } name; /**< The different names for the theme */ - char *comment; /**< String describing the theme */ - char *example_icon; /**< Icon to use as an example of the theme */ + const char *comment; /**< String describing the theme */ + const char *example_icon; /**< Icon to use as an example of the theme */ /* An icon theme can have multiple directories that store it's icons. We * need to be able to find a search each one. */ @@ -82,7 +82,7 @@ typedef struct Efreet_Icon_Theme_Directory Efreet_Icon_Theme_Directory; */ struct Efreet_Icon_Theme_Directory { - char *name; /**< The directory name */ + const char *name; /**< The directory name */ Efreet_Icon_Theme_Context context; /**< The type of icons in the dir */ Efreet_Icon_Size_Type type; /**< The size type for the icons */ @@ -106,8 +106,8 @@ typedef struct Efreet_Icon Efreet_Icon; */ struct Efreet_Icon { - char *path; /**< Full path to the icon */ - char *name; /**< Translated UTF8 string that can + const char *path; /**< Full path to the icon */ + const char *name; /**< Translated UTF8 string that can be used for the icon name */ struct diff --git a/legacy/efreet/src/lib/efreet_ini.c b/legacy/efreet/src/lib/efreet_ini.c index f376d4532b..5d9c2be630 100644 --- a/legacy/efreet/src/lib/efreet_ini.c +++ b/legacy/efreet/src/lib/efreet_ini.c @@ -24,7 +24,7 @@ static int _efreet_ini_log_dom = -1; static Eina_Hash *efreet_ini_parse(const char *file); -static char *efreet_ini_unescape(const char *str); +static const char *efreet_ini_unescape(const char *str); static Eina_Bool efreet_ini_section_save(const Eina_Hash *hash, const void *key, void *data, void *fdata); static Eina_Bool @@ -168,9 +168,9 @@ efreet_ini_parse(const char *file) memcpy((char*)header, line_start + 1, header_length - 1); ((char*)header)[header_length - 1] = '\0'; - section = eina_hash_string_small_new(free); + section = eina_hash_string_small_new(EINA_FREE_CB(eina_stringshare_del)); - eina_hash_del(data, header, NULL); + eina_hash_del_by_key(data, header); // if (old) INF("[efreet] Warning: duplicate section '%s' " // "in file '%s'", header, file); @@ -245,7 +245,7 @@ efreet_ini_parse(const char *file) value_end - value_start); ((char*)value)[value_end - value_start] = '\0'; - eina_hash_del(section, key, NULL); + eina_hash_del_by_key(section, key); eina_hash_add(section, key, efreet_ini_unescape(value)); } // else @@ -345,7 +345,7 @@ efreet_ini_section_add(Efreet_Ini *ini, const char *section) ini->data = eina_hash_string_small_new(EINA_FREE_CB(eina_hash_free)); if (eina_hash_find(ini->data, section)) return; - hash = eina_hash_string_small_new(free); + hash = eina_hash_string_small_new(EINA_FREE_CB(eina_stringshare_del)); eina_hash_add(ini->data, section, hash); } @@ -376,8 +376,8 @@ efreet_ini_string_set(Efreet_Ini *ini, const char *key, const char *value) { if (!ini || !key || !ini->section) return; - eina_hash_del(ini->section, key, NULL); - eina_hash_add(ini->section, key, strdup(value)); + eina_hash_del_by_key(ini->section, key); + eina_hash_add(ini->section, key, eina_stringshare_add(value)); } /** @@ -613,7 +613,7 @@ efreet_ini_key_unset(Efreet_Ini *ini, const char *key) { if (!ini || !key || !ini->section) return; - eina_hash_del(ini->section, key, NULL); + eina_hash_del_by_key(ini->section, key); } /** @@ -621,19 +621,19 @@ efreet_ini_key_unset(Efreet_Ini *ini, const char *key) * @return An allocated unescaped string * @brief Unescapes backslash escapes in a string */ -static char * +static const char * efreet_ini_unescape(const char *str) { char *buf, *dest; const char *p; if (!str) return NULL; - if (!strchr(str, '\\')) return strdup(str); - buf = malloc(strlen(str) + 1); + if (!strchr(str, '\\')) return eina_stringshare_add(str); + buf = alloca(strlen(str) + 1); p = str; dest = buf; - while(*p) + while (*p) { if ((*p == '\\') && (p[1] != '\0')) { @@ -667,7 +667,7 @@ efreet_ini_unescape(const char *str) } *(dest) = '\0'; - return buf; + return eina_stringshare_add(buf); } static Eina_Bool