mirror of
https://git.yoctoproject.org/poky
synced 2026-02-25 10:59:41 +01:00
Linux system's realpath() remove trailing slashes, but pseudo's doesn't, need
make them identical.
E.g., the following code (rel.c) prints '/tmp' with system's realpath, but
pseudo's realpath prints '/tmp/':
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
int main() {
char out[PATH_MAX];
printf("%s\n", realpath("/tmp/", out));
return 0;
}
$ bitbake base-passwd -cdevshell # For pseudo env
$ gcc rel.c
$ ./a.out
/tmp/ (but should be /tmp)
This patch fixes the problem.
(From OE-Core rev: 319bbf66e03377adf2db7efa93ef578e3460eb38)
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
58 lines
1.4 KiB
Diff
58 lines
1.4 KiB
Diff
From 86c9a5610e3333ad6aaadb1ac1e8b5a2c948d119 Mon Sep 17 00:00:00 2001
|
|
From: Robert Yang <liezhi.yang@windriver.com>
|
|
Date: Mon, 25 Nov 2019 18:46:45 +0800
|
|
Subject: [PATCH] realpath.c: Remove trailing slashes
|
|
|
|
Linux system's realpath() remove trailing slashes, but pseudo's doesn't, need
|
|
make them identical.
|
|
|
|
E.g., the following code (rel.c) prints '/tmp' with system's realpath, but
|
|
pseudo's realpath prints '/tmp/':
|
|
|
|
#include <stdio.h>
|
|
#include <limits.h>
|
|
#include <stdlib.h>
|
|
|
|
int main() {
|
|
char out[PATH_MAX];
|
|
printf("%s\n", realpath("/tmp/", out));
|
|
return 0;
|
|
}
|
|
|
|
$ bitbake base-passwd -cdevshell # For pseudo env
|
|
$ gcc rel.c
|
|
$ ./a.out
|
|
/tmp/ (but should be /tmp)
|
|
|
|
This patch fixes the problem.
|
|
|
|
Upstream-Status: Submitted [https://lists.yoctoproject.org/g/poky/message/11879]
|
|
|
|
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
|
|
---
|
|
ports/unix/guts/realpath.c | 9 ++++++++-
|
|
1 file changed, 8 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/ports/unix/guts/realpath.c b/ports/unix/guts/realpath.c
|
|
--- a/ports/unix/guts/realpath.c
|
|
+++ b/ports/unix/guts/realpath.c
|
|
@@ -14,7 +14,14 @@
|
|
errno = ENAMETOOLONG;
|
|
return NULL;
|
|
}
|
|
- if ((len = strlen(rname)) >= pseudo_sys_path_max()) {
|
|
+ len = strlen(rname);
|
|
+ char *ep = rname + len - 1;
|
|
+ while (ep > rname && *ep == '/') {
|
|
+ --len;
|
|
+ *(ep--) = '\0';
|
|
+ }
|
|
+
|
|
+ if (len >= pseudo_sys_path_max()) {
|
|
errno = ENAMETOOLONG;
|
|
return NULL;
|
|
}
|
|
--
|
|
2.7.4
|
|
|