summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2007-10-31 17:43:04 +0100
committerDan McGee <dan@archlinux.org>2007-11-04 16:50:43 +0100
commitdea9b3bc0f6ba49aec8452958f5373fbb20e7df2 (patch)
treeb06f792e4d258b0ca69a0fb373d40c2eacee6b2e
parent4a5e7b6bd1a887f67b9b9ec8115250fc92c741ca (diff)
downloadpacman-dea9b3bc0f6ba49aec8452958f5373fbb20e7df2.tar.gz
pacman-dea9b3bc0f6ba49aec8452958f5373fbb20e7df2.tar.xz
Fix basename usage in pacman and utilities
basename() is a rather untrusty function call on a lot of platforms as it does some weird and different things. To solve this, I added a mbasename fuction to pacman to take its place, and simply removed its usage in the utilities (it isn't worth dealing with there). Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--src/pacman/pacman.c36
-rw-r--r--src/util/testdb.c4
-rw-r--r--src/util/testpkg.c4
3 files changed, 35 insertions, 9 deletions
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 05ae8d13..3859c8d3 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -57,15 +57,15 @@ static alpm_list_t *pm_targets;
* @param op the operation code requested
* @param myname basename(argv[0])
*/
-static void usage(int op, char *myname)
+static void usage(int op, const char * const myname)
{
/* prefetch some strings for usage below, which moves a lot of calls
* out of gettext. */
- char * const str_opt = _("options");
- char * const str_file = _("file");
- char * const str_pkg = _("package");
- char * const str_usg = _("usage");
- char * const str_opr = _("operation");
+ char const * const str_opt = _("options");
+ char const * const str_file = _("file");
+ char const * const str_pkg = _("package");
+ char const * const str_usg = _("usage");
+ char const * const str_opr = _("operation");
if(op == PM_OP_MAIN) {
printf("%s: %s <%s> [...]\n", str_usg, myname, str_opr);
@@ -233,6 +233,28 @@ static void cleanup(int signum)
exit(signum);
}
+/** Parse the basename of a program from a path.
+* Grabbed from the uClibc source.
+* @param path path to parse basename from
+*
+* @return everything following the final '/'
+*/
+static char *mbasename(const char *path)
+{
+ const char *s;
+ const char *p;
+
+ p = s = path;
+
+ while (*s) {
+ if (*s++ == '/') {
+ p = s;
+ }
+ }
+
+ return (char *)p;
+}
+
/** Parse command-line arguments for each operation.
* @param argc argc
* @param argv argv
@@ -432,7 +454,7 @@ static int parseargs(int argc, char *argv[])
}
if(config->help) {
- usage(config->op, basename(argv[0]));
+ usage(config->op, mbasename(argv[0]));
return(2);
}
if(config->version) {
diff --git a/src/util/testdb.c b/src/util/testdb.c
index a06456a4..421a553c 100644
--- a/src/util/testdb.c
+++ b/src/util/testdb.c
@@ -32,6 +32,8 @@
#include <alpm.h>
#include <alpm_list.h>
+#define BASENAME "testdb"
+
int str_cmp(const void *s1, const void *s2)
{
return(strcmp(s1, s2));
@@ -145,7 +147,7 @@ int main(int argc, char **argv)
} else if(argc == 3 && strcmp(argv[1], "-b") == 0) {
dbpath = argv[2];
} else {
- fprintf(stderr, "usage: %s -b <pacman db>\n", basename(argv[0]));
+ fprintf(stderr, "usage: %s -b <pacman db>\n", BASENAME);
return(1);
}
diff --git a/src/util/testpkg.c b/src/util/testpkg.c
index 7d844e85..d2679e58 100644
--- a/src/util/testpkg.c
+++ b/src/util/testpkg.c
@@ -27,6 +27,8 @@
#include <alpm.h>
+#define BASENAME "testpkg"
+
static void output_cb(pmloglevel_t level, char *fmt, va_list args)
{
if(strlen(fmt)) {
@@ -45,7 +47,7 @@ int main(int argc, char **argv)
pmpkg_t *pkg = NULL;
if(argc != 2) {
- fprintf(stderr, "usage: %s <package file>\n", basename(argv[0]));
+ fprintf(stderr, "usage: %s <package file>\n", BASENAME);
return(1);
}