comparison libpurple/util.c @ 18147:5653692dcf79

Use dynamically allocated strings for the user_dir caching. Do we need to free these strings at libpurple uninit? If so, I can throw in a purple_util_uninit() function.
author Richard Laager <rlaager@wiktel.com>
date Sun, 17 Jun 2007 02:52:24 +0000
parents 16f3919b78f5
children c5c265dff90c
comparison
equal deleted inserted replaced
18144:1a282f3d8057 18147:5653692dcf79
64 char *webdata; 64 char *webdata;
65 unsigned long len; 65 unsigned long len;
66 unsigned long data_len; 66 unsigned long data_len;
67 }; 67 };
68 68
69 static char custom_home_dir[MAXPATHLEN]; 69 static char *custom_user_dir = NULL;
70 static char home_dir[MAXPATHLEN] = ""; 70 static char *home_dir = NULL;
71 71
72 PurpleMenuAction * 72 PurpleMenuAction *
73 purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data, 73 purple_menu_action_new(const char *label, PurpleCallback callback, gpointer data,
74 GList *children) 74 GList *children)
75 { 75 {
2394 2394
2395 /* Returns the argument passed to -c IFF it was present, or ~/.purple. */ 2395 /* Returns the argument passed to -c IFF it was present, or ~/.purple. */
2396 const char * 2396 const char *
2397 purple_user_dir(void) 2397 purple_user_dir(void)
2398 { 2398 {
2399 if (custom_home_dir != NULL && *custom_home_dir) { 2399 if (custom_user_dir != NULL)
2400 strcpy ((char*) &home_dir, (char*) &custom_home_dir); 2400 return custom_user_dir;
2401 } else if (!*home_dir) { 2401 else if (!home_dir)
2402 const gchar *hd = purple_home_dir(); 2402 home_dir = g_build_filename(purple_home_dir(), ".purple", NULL);
2403
2404 if (hd) {
2405 g_strlcpy((char*) &home_dir, hd, sizeof(home_dir));
2406 g_strlcat((char*) &home_dir, G_DIR_SEPARATOR_S ".purple",
2407 sizeof(home_dir));
2408 }
2409 }
2410 2403
2411 return home_dir; 2404 return home_dir;
2412 } 2405 }
2413 2406
2414 void purple_util_set_user_dir(const char *dir) 2407 void purple_util_set_user_dir(const char *dir)
2415 { 2408 {
2416 if (dir != NULL && strlen(dir) > 0) { 2409 g_free(custom_user_dir);
2417 g_strlcpy((char*) &custom_home_dir, dir, 2410
2418 sizeof(custom_home_dir)); 2411 if (dir != NULL && *dir)
2419 } 2412 custom_user_dir = g_strdup(dir);
2413 else
2414 custom_user_dir = NULL;
2420 } 2415 }
2421 2416
2422 int purple_build_dir (const char *path, int mode) 2417 int purple_build_dir (const char *path, int mode)
2423 { 2418 {
2424 #if GLIB_CHECK_VERSION(2,8,0) 2419 #if GLIB_CHECK_VERSION(2,8,0)