Mercurial > pidgin
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) |