mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Ahmad Fatoum <a.fatoum@pengutronix.de>
To: barebox@lists.infradead.org
Cc: Ahmad Fatoum <a.fatoum@pengutronix.de>
Subject: [PATCH 4/7] treewide: replace basename with kbasename
Date: Mon, 25 Nov 2024 16:29:24 +0100	[thread overview]
Message-ID: <20241125152927.546493-5-a.fatoum@pengutronix.de> (raw)
In-Reply-To: <20241125152927.546493-1-a.fatoum@pengutronix.de>

barebox has three functions for basename():

  - posix_basename: This is basename() as specified by POSIX and
    may modify the buffer pointed at by its char * argument.

  - kbasename: The Linux kernel version never modifies the input and
    takes a const char * to indicate this

  - basename: The GNU version of basename behaves like the kernel
    version, but takes a char * as argument, which is internally casted
    away.

Let's improve const-safety in barebox by explicitly using kbasename.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 commands/nand.c      | 4 ++--
 commands/partition.c | 6 +++---
 commands/tftp.c      | 5 +++--
 common/boot.c        | 2 +-
 common/complete.c    | 8 ++++----
 fs/bpkfs.c           | 8 ++++----
 net/nfs.c            | 8 ++++----
 7 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/commands/nand.c b/commands/nand.c
index d80ec24a7b92..d756092c64c0 100644
--- a/commands/nand.c
+++ b/commands/nand.c
@@ -71,7 +71,7 @@ static int do_nand(int argc, char *argv[])
 
 	if (command == NAND_ADD) {
 		while (optind < argc) {
-			if (dev_add_bb_dev(basename(argv[optind]), NULL))
+			if (dev_add_bb_dev(kbasename(argv[optind]), NULL))
 				return 1;
 
 			optind++;
@@ -82,7 +82,7 @@ static int do_nand(int argc, char *argv[])
 
 	if (command == NAND_DEL) {
 		while (optind < argc) {
-			if (dev_remove_bb_dev(basename(argv[optind])))
+			if (dev_remove_bb_dev(kbasename(argv[optind])))
 				return 1;
 			optind++;
 		}
diff --git a/commands/partition.c b/commands/partition.c
index 14f400ccb433..1b655f853b3b 100644
--- a/commands/partition.c
+++ b/commands/partition.c
@@ -27,7 +27,7 @@
 
 static int do_addpart(int argc, char *argv[])
 {
-	char *devname;
+	const char *devname;
 	loff_t devsize;
 	struct stat s;
 	int opt;
@@ -50,7 +50,7 @@ static int do_addpart(int argc, char *argv[])
 	}
 	devsize = s.st_size;
 
-	devname = basename(argv[optind]);
+	devname = kbasename(argv[optind]);
 
 	return cmdlinepart_do_parse(devname, argv[optind + 1], devsize, flags);
 }
@@ -84,7 +84,7 @@ static int do_delpart(int argc, char *argv[])
 	int i, err;
 
 	for (i = 1; i < argc; i++) {
-		err = devfs_del_partition(basename(argv[i]));
+		err = devfs_del_partition(kbasename(argv[i]));
 		if (err) {
 			printf("cannot delete %s: %s\n", argv[i], strerror(-err));
 			break;
diff --git a/commands/tftp.c b/commands/tftp.c
index 6ac822c9e832..5e8d8d17761d 100644
--- a/commands/tftp.c
+++ b/commands/tftp.c
@@ -18,7 +18,8 @@
 
 static int do_tftpb(int argc, char *argv[])
 {
-	char *source, *dest, *freep;
+	const char *source, *dest;
+	char *freep;
 	int opt;
 	int tftp_push = 0;
 	int port = -1;
@@ -50,7 +51,7 @@ static int do_tftpb(int argc, char *argv[])
 	source = argv[optind++];
 
 	if (argc == optind)
-		dest = basename(source);
+		dest = kbasename(source);
 	else
 		dest = argv[optind];
 
diff --git a/common/boot.c b/common/boot.c
index cbfe6649b3a3..89eb7a974566 100644
--- a/common/boot.c
+++ b/common/boot.c
@@ -204,7 +204,7 @@ static int bootscript_create_entry(struct bootentries *bootentries, const char *
 	bs->entry.release = bootscript_entry_release;
 	bs->entry.boot = bootscript_boot;
 	bs->scriptpath = xstrdup(name);
-	bs->entry.title = xstrdup(basename(bs->scriptpath));
+	bs->entry.title = xstrdup(kbasename(bs->scriptpath));
 	bs->entry.description = basprintf("script: %s", name);
 	bootentries_add_entry(bootentries, &bs->entry);
 
diff --git a/common/complete.c b/common/complete.c
index 3911535621b1..5b8b499ed38f 100644
--- a/common/complete.c
+++ b/common/complete.c
@@ -43,9 +43,9 @@ static int file_complete(struct string_list *sl, char *instr,
 	DIR *dir;
 	struct dirent *d;
 	char tmp[PATH_MAX];
-	char *base;
+	const char *base;
 
-	base = basename(instr);
+	base = kbasename(instr);
 	dirn = dirn ?: dirname(path);
 
 	dir = opendir(dirn);
@@ -236,12 +236,12 @@ EXPORT_SYMBOL(devicetree_alias_complete);
 int devicetree_nodepath_complete(struct string_list *sl, char *instr)
 {
 	struct device_node *node, *child;
-	char *dirn, *base;
+	const char *dirn, *base;
 	char *path = strdup(instr);
 
 	if (*instr == '/') {
 		dirn = dirname(path);
-		base = basename(instr);
+		base = kbasename(instr);
 		node = of_find_node_by_path(dirn);
 		if (!node)
 			goto out;
diff --git a/fs/bpkfs.c b/fs/bpkfs.c
index ea2c27958520..7b714de66158 100644
--- a/fs/bpkfs.c
+++ b/fs/bpkfs.c
@@ -132,7 +132,7 @@ static int bpkfs_open(struct device *dev, FILE *f, const char *filename)
 	struct bpkfs_handle *priv = dev->priv;
 	struct bpkfs_handle_data *d;
 	struct bpkfs_handle_hw *h;
-	char *dir, *file;
+	const char *dir, *file;
 	int ret = -EINVAL;
 	char *tmp = xstrdup(filename);
 	char *tmp2 = xstrdup(filename);
@@ -146,7 +146,7 @@ static int bpkfs_open(struct device *dev, FILE *f, const char *filename)
 	if (!h)
 		goto out;
 
-	file = basename(tmp2);
+	file = kbasename(tmp2);
 	d = bpkfs_data_get_by_name(h, file);
 	if (!d)
 		goto out;
@@ -284,7 +284,7 @@ static int bpkfs_stat(struct device *dev, const char *filename,
 	struct bpkfs_handle *priv = dev->priv;
 	struct bpkfs_handle_data *d;
 	struct bpkfs_handle_hw *h;
-	char *dir, *file;
+	const char *dir, *file;
 	int ret = -EINVAL;
 	char *tmp = xstrdup(filename);
 	char *tmp2 = xstrdup(filename);
@@ -311,7 +311,7 @@ static int bpkfs_stat(struct device *dev, const char *filename,
 	if (!h)
 		goto out;
 
-	file = basename(tmp2);
+	file = kbasename(tmp2);
 	d = bpkfs_data_get_by_name(h, file);
 	if (!d)
 		goto out;
diff --git a/net/nfs.c b/net/nfs.c
index df0840e4e7dc..68c35e11f6a9 100644
--- a/net/nfs.c
+++ b/net/nfs.c
@@ -147,7 +147,7 @@ static int	nfs_state;
 #define STATE_READLINK_REQ		7
 #define STATE_DONE			8
 
-static char *nfs_filename;
+static const char *nfs_filename;
 static char *nfs_path;
 static char nfs_path_buff[2048];
 
@@ -322,7 +322,7 @@ static void nfs_readlink_req(void)
 /**************************************************************************
 NFS_LOOKUP - Lookup Pathname
 **************************************************************************/
-static void nfs_lookup_req(char *fname)
+static void nfs_lookup_req(const char *fname)
 {
 	uint32_t data[1024];
 	uint32_t *p;
@@ -621,7 +621,7 @@ static void nfs_handler(void *ctx, char *packet, unsigned len)
 
 		debug("Symlink --> %s\n", nfs_path);
 
-		nfs_filename = basename(nfs_path);
+		nfs_filename = kbasename(nfs_path);
 		nfs_path     = dirname(nfs_path);
 
 		nfs_state = STATE_MOUNT_REQ;
@@ -664,7 +664,7 @@ static void nfs_start(char *p)
 
 	strcpy(nfs_path, p);
 
-	nfs_filename = basename (nfs_path);
+	nfs_filename = kbasename (nfs_path);
 	nfs_path     = dirname (nfs_path);
 
 	printf("\nFilename '%s/%s'.\n", nfs_path, nfs_filename);
-- 
2.39.5




  parent reply	other threads:[~2024-11-25 15:33 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-25 15:29 [PATCH 0/7] add proper strdup_const support Ahmad Fatoum
2024-11-25 15:29 ` [PATCH 1/7] sandbox: hostfile: strdup device tree node names Ahmad Fatoum
2024-11-25 15:29 ` [PATCH 2/7] lds: implement is_barebox_rodata Ahmad Fatoum
2024-11-25 15:29 ` [PATCH 3/7] string: implement proper strdup_const/free_const Ahmad Fatoum
2024-11-25 15:29 ` Ahmad Fatoum [this message]
2024-11-25 15:29 ` [PATCH 5/7] treewide: use strdup_const where appropriate Ahmad Fatoum
2024-11-25 15:29 ` [PATCH 6/7] fs: efi: replace allocation with local buffer Ahmad Fatoum
2024-11-25 15:29 ` [PATCH 7/7] cdev: fix string leaks in devfs links Ahmad Fatoum

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20241125152927.546493-5-a.fatoum@pengutronix.de \
    --to=a.fatoum@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox