diff options
author | Werner Koch <[email protected]> | 2015-07-22 09:05:32 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2015-07-22 09:05:32 +0000 |
commit | 69d2c9b09bd9d0b86b9f2feb585037a2c11795b0 (patch) | |
tree | a083f016e732373e3b28a4921e83cd032b014075 /common/stringhelp.c | |
parent | scd: change_keyattr_from_string for ECC. (diff) | |
download | gnupg-69d2c9b09bd9d0b86b9f2feb585037a2c11795b0.tar.gz gnupg-69d2c9b09bd9d0b86b9f2feb585037a2c11795b0.zip |
Avoid a leading double slash in make_filename.
* common/stringhelp.c (do_make_filename): Special case leading '/'.
Diffstat (limited to 'common/stringhelp.c')
-rw-r--r-- | common/stringhelp.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/common/stringhelp.c b/common/stringhelp.c index 6714eb8b9..576c2eaed 100644 --- a/common/stringhelp.c +++ b/common/stringhelp.c @@ -493,7 +493,13 @@ do_make_filename (int xmode, const char *first_part, va_list arg_ptr) xfree (home_buffer); for (argc=0; argv[argc]; argc++) - p = stpcpy (stpcpy (p, "/"), argv[argc]); + { + /* Avoid a leading double slash if the first part was "/". */ + if (!argc && name[0] == '/' && !name[1]) + p = stpcpy (p, argv[argc]); + else + p = stpcpy (stpcpy (p, "/"), argv[argc]); + } if (want_abs) { @@ -543,7 +549,13 @@ do_make_filename (int xmode, const char *first_part, va_list arg_ptr) memcpy (home_buffer, p, p - name + 1); p = home_buffer + (p - name + 1); } - strcpy (stpcpy (stpcpy (p, home), "/"), name); + + /* Avoid a leading double slash if the cwd is "/". */ + if (home[0] == '/' && !home[1]) + strcpy (stpcpy (p, "/"), name); + else + strcpy (stpcpy (stpcpy (p, home), "/"), name); + xfree (name); name = home_buffer; /* Let's do a simple compression to catch the most common |