From d6eb28d5deef18c9b3fdb953553705b182ea8403 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Fri, 9 Jul 2010 19:45:44 +0000 Subject: Replace unnecessarily complicated path concatenation with something simpler and easily adaptable to different platform path structures. svn path=/trunk/netsurf/; revision=10621 --- amiga/misc.c | 15 +++++++++++++++ beos/beos_gui.cpp | 19 +++++++++++++++++++ desktop/save_complete.c | 16 +++++++--------- framebuffer/misc.c | 19 +++++++++++++++++++ gtk/gtk_gui.c | 19 +++++++++++++++++++ riscos/gui.c | 19 +++++++++++++++++++ utils/utils.h | 1 + windows/misc.c | 19 +++++++++++++++++++ 8 files changed, 118 insertions(+), 9 deletions(-) diff --git a/amiga/misc.c b/amiga/misc.c index 17ea4c22b..8b148d852 100755 --- a/amiga/misc.c +++ b/amiga/misc.c @@ -106,6 +106,21 @@ char *filename_from_path(char *path) return strdup(FilePart(path)); } +/** + * Add a path component/filename to an existing path + * + * \param path buffer containing path + free space + * \param length length of buffer "path" + * \param newpart string containing path component to add to path + * \return true on success + */ + +bool path_add_part(char *path, int length, char *newpart) +{ + if(AddPart(path, newpart, length)) return true; + else return false; +} + /** * returns a string without escape chars or |M chars. * (based on remove_underscores from utils.c) diff --git a/beos/beos_gui.cpp b/beos/beos_gui.cpp index 83af4b682..460ae1a87 100644 --- a/beos/beos_gui.cpp +++ b/beos/beos_gui.cpp @@ -1197,3 +1197,22 @@ char *filename_from_path(char *path) return strdup(leafname); } + +/** + * Add a path component/filename to an existing path + * + * \param path buffer containing path + free space + * \param length length of buffer "path" + * \param newpart string containing path component to add to path + * \return true on success + */ + +bool path_add_part(char *path, int length, char *newpart) +{ + if(path[strlen(path)] != '/') + strncat(path, "/", length); + + strncat(path, newpart, length); + + return true; +} diff --git a/desktop/save_complete.c b/desktop/save_complete.c index 88fe31560..19c1696d6 100644 --- a/desktop/save_complete.c +++ b/desktop/save_complete.c @@ -759,21 +759,19 @@ void save_complete_list_dump(void) bool save_complete_inventory(const char *path, struct save_complete_entry *list) { - char urlpath[256]; + char fullpath[256]; FILE *fp; - char *pathstring, *standardpath = (path[0] == '/') ? - (char *)(path + 1) : (char *)path; struct save_complete_entry *entry; + bool error; - snprintf(urlpath, sizeof urlpath, "file:///%s/Inventory", - standardpath); - pathstring = url_to_path(urlpath); - if (pathstring == NULL) { + strncpy(fullpath, path, sizeof fullpath); + error = path_add_part(fullpath, sizeof fullpath, path); + + if (error == false) { warn_user("NoMemory", 0); return false; } - fp = fopen(pathstring, "w"); - free(pathstring); + fp = fopen(fullpath, "w"); if (!fp) { LOG(("fopen(): errno = %i", errno)); warn_user("SaveError", strerror(errno)); diff --git a/framebuffer/misc.c b/framebuffer/misc.c index 5e351f517..143ea8cf9 100644 --- a/framebuffer/misc.c +++ b/framebuffer/misc.c @@ -59,3 +59,22 @@ char *filename_from_path(char *path) return strdup(leafname); } + +/** + * Add a path component/filename to an existing path + * + * \param path buffer containing path + free space + * \param length length of buffer "path" + * \param newpart string containing path component to add to path + * \return true on success + */ + +bool path_add_part(char *path, int length, char *newpart) +{ + if(path[strlen(path)] != '/') + strncat(path, "/", length); + + strncat(path, newpart, length); + + return true; +} diff --git a/gtk/gtk_gui.c b/gtk/gtk_gui.c index 79391ab4f..2470f30b5 100644 --- a/gtk/gtk_gui.c +++ b/gtk/gtk_gui.c @@ -978,3 +978,22 @@ char *filename_from_path(char *path) return strdup(leafname); } + +/** + * Add a path component/filename to an existing path + * + * \param path buffer containing path + free space + * \param length length of buffer "path" + * \param newpart string containing path component to add to path + * \return true on success + */ + +bool path_add_part(char *path, int length, char *newpart) +{ + if(path[strlen(path)] != '/') + strncat(path, "/", length); + + strncat(path, newpart, length); + + return true; +} diff --git a/riscos/gui.c b/riscos/gui.c index eaba7bf58..0c04d69a5 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -2478,3 +2478,22 @@ char *filename_from_path(char *path) return leafname; } + +/** + * Add a path component/filename to an existing path + * + * \param path buffer containing path + free space + * \param length length of buffer "path" + * \param newpart string containing path component to add to path + * \return true on success + */ + +bool path_add_part(char *path, int length, char *newpart) +{ + if(path[strlen(path)] != '.') + strncat(path, ".", length); + + strncat(path, newpart, length); + + return true; +} diff --git a/utils/utils.h b/utils/utils.h index 5b06d9caa..b8edfb836 100644 --- a/utils/utils.h +++ b/utils/utils.h @@ -121,4 +121,5 @@ query_id query_user(const char *query, const char *detail, void query_close(query_id); void PDF_Password(char **owner_pass, char **user_pass, char *path); char *filename_from_path(char *path); +bool path_add_part(char *path, int length, char *newpart); #endif diff --git a/windows/misc.c b/windows/misc.c index 7a6fc3206..bb1ca3f38 100644 --- a/windows/misc.c +++ b/windows/misc.c @@ -65,3 +65,22 @@ char *filename_from_path(char *path) return strdup(leafname); } + +/** + * Add a path component/filename to an existing path + * + * \param path buffer containing path + free space + * \param length length of buffer "path" + * \param newpart string containing path component to add to path + * \return true on success + */ + +bool path_add_part(char *path, int length, char *newpart) +{ + if(path[strlen(path)] != '\\') + strncat(path, "\\", length); + + strncat(path, newpart, length); + + return true; +} -- cgit v1.2.3