From: Mark D. <the...@us...> - 2003-05-25 18:35:27
|
Update of /cvsroot/gaim/gaim/src In directory sc8-pr-cvs1:/tmp/cvs-serv15652/src Modified Files: browser.c util.c util.h Log Message: This makes the manual browser setting good. -You can have multiple %s's in a browser command (I don't know why you would want to, but you can) -It doesn't double-free memory and cause gaim to crash -If there is no %s, it adds the URL to the end of the command (it did this before, I'm just re-iterating that it still works) -It's fewer lines of code and it's cleaner, I think Index: browser.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/browser.c,v retrieving revision 1.47 retrieving revision 1.48 diff -u -d -r1.47 -r1.48 --- browser.c 25 May 2003 16:52:35 -0000 1.47 +++ browser.c 25 May 2003 18:35:23 -0000 1.48 @@ -584,9 +584,6 @@ break; case BROWSER_MANUAL: { - char *space_free_url = NULL; - char *web_tmp = NULL; - if (!web_command[0]) { gaim_notify_error(NULL, NULL, _("Unable to launch your browser because " @@ -596,28 +593,12 @@ return; } - space_free_url = g_strdup(url); - g_strdelimit(space_free_url, " ", '+'); - /* if (strstr(web_command, "%s")) - command = g_strdup_printf(web_command, space_free_url); - - Replaced the above with the following to avoid users - from entering more than one %s as part of the browser - command. - */ - web_tmp = strstr(web_command, "%s"); - if(web_tmp) - { - if (strstr((web_tmp + 1), "%s")) - command = g_strdup_printf(web_command, space_free_url); - else - gaim_notify_error(NULL, NULL, _("Unable to launch your browser because the 'Manual' browser command has too many '%s'."), NULL); - } + command = gaim_strreplace(web_command, "%s", url); else - command = g_strdup_printf("%s %s", web_command, space_free_url); - g_free(space_free_url); - g_free(web_tmp); + /* There is no "%s" in the browser command. Assume the user + * wanted the URL tacked on to the end of the command. */ + command = g_strdup_printf("%s %s", web_command, url); } break; } Index: util.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/util.c,v retrieving revision 1.192 retrieving revision 1.193 diff -u -d -r1.192 -r1.193 --- util.c 23 May 2003 01:45:17 -0000 1.192 +++ util.c 25 May 2003 18:35:23 -0000 1.193 @@ -1170,3 +1170,14 @@ g_free(b_norm); return ret; } + +gchar *gaim_strreplace(const gchar *string, const gchar *delimiter, const gchar *replacement) { + gchar **split; + gchar *ret; + + split = g_strsplit(string, delimiter, 0); + ret = g_strjoinv(replacement, split); + g_strfreev(split); + + return ret; +} Index: util.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/util.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- util.h 23 May 2003 01:45:17 -0000 1.6 +++ util.h 25 May 2003 18:35:24 -0000 1.7 @@ -332,4 +332,15 @@ */ gint gaim_utf8_strcasecmp(const gchar *a, const gchar *b); +/** + * Given a string, this replaces one substring with another + * and returns a newly allocated string. + * + * @param string The string from which to replace stuff. + * @param delimiter The substring you want replaced. + * @param replacement The substring you want inserted in place + * of the delimiting substring. + */ +gchar *gaim_strreplace(const gchar *string, const gchar *delimiter, const gchar *replacement); + #endif /* _GAIM_UTIL_H_ */ |