X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fconcat_path_file.c;h=9aae601a4cca7ad100a561e78e383c93c0b1f079;hb=b95636c52fbb058a39548bcbc4e86456ebbd7b7b;hp=ce92310eaa7a139a4f15f5abd1cce28d1b826c6d;hpb=044a72d0d50bb7380601232d1388453f01fff622;p=oweals%2Fbusybox.git diff --git a/libbb/concat_path_file.c b/libbb/concat_path_file.c index ce92310ea..9aae601a4 100644 --- a/libbb/concat_path_file.c +++ b/libbb/concat_path_file.c @@ -1,26 +1,27 @@ +/* vi: set sw=4 ts=4: */ /* - * busybox library eXtendet funcion + * Utility routines. * - * concatenate path and file name to new allocation buffer, - * not addition '/' if path name already have '/' + * Copyright (C) many different people. + * If you wrote this, please acknowledge your work. * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. + */ + +/* concatenate path and file name to new allocation buffer, + * not adding '/' if path name already has '/' */ #include "libbb.h" -extern char *concat_path_file(const char *path, const char *filename) +char *concat_path_file(const char *path, const char *filename) { - char *outbuf; - int l; - int flg_slash = 1; + char *lc; - l = strlen(path); - if (l>0 && path[l-1] == '/') - flg_slash--; - l += strlen(filename); - if (l>0 && filename[0] == '/') - flg_slash--; - outbuf = xmalloc(l+1+flg_slash); - sprintf(outbuf, (flg_slash ? "%s/%s" : "%s%s"), path, filename); - return outbuf; + if (!path) + path = ""; + lc = last_char_is(path, '/'); + while (*filename == '/') + filename++; + return xasprintf("%s%s%s", path, (lc==NULL ? "/" : ""), filename); }