diff options
author | Yixun Lan <dlan@gentoo.org> | 2022-09-26 20:18:17 +0800 |
---|---|---|
committer | Yixun Lan <dlan@gentoo.org> | 2022-09-26 20:21:35 +0800 |
commit | 8d87286759fdff1a4ed2b9a36f7a1818e031e841 (patch) | |
tree | 35d8206a3fe02750b425edc68f19020368c670d8 /sys-process | |
parent | net-misc/wput: add 0.6.2_p20130413_p11 (Debian fork) (diff) | |
download | gentoo-8d87286759fdff1a4ed2b9a36f7a1818e031e841.tar.gz gentoo-8d87286759fdff1a4ed2b9a36f7a1818e031e841.tar.bz2 gentoo-8d87286759fdff1a4ed2b9a36f7a1818e031e841.zip |
sys-process/psinfo: fix 'unsigned char' issue in RISC-V/ARM64 platform
Closes: https://bugs.gentoo.org/872821
Signed-off-by: Yixun Lan <dlan@gentoo.org>
Diffstat (limited to 'sys-process')
-rw-r--r-- | sys-process/psinfo/files/psinfo-0.12-char.patch | 65 | ||||
-rw-r--r-- | sys-process/psinfo/psinfo-0.12-r1.ebuild | 3 |
2 files changed, 67 insertions, 1 deletions
diff --git a/sys-process/psinfo/files/psinfo-0.12-char.patch b/sys-process/psinfo/files/psinfo-0.12-char.patch new file mode 100644 index 000000000000..d29361633185 --- /dev/null +++ b/sys-process/psinfo/files/psinfo-0.12-char.patch @@ -0,0 +1,65 @@ +Subject: [PATCH] fix 'char' issue in RISC-V (also Arm64) platform + +According to RISC-V psAbi manual[1], "char" is equivalent to "unsigned char", +so in RISC-V/ARM64 the following code will always print out 'false', +while in X86_64 it will print out 'true' + +test() { + char val = EOF; + printf("%s", val == EOF ? "true" : "false"); +} + +According to man page, the following two function return value is 'int': + int getopt(int argc, char *const argv[], + const char *optstring); + int fgetc(FILE *stream); + +so, we use 'int' variable and then convert to 'char' if nencessary + +[1] https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-cc.adoc +snip of description: + C/C++ type representations + char is unsigned. + +Bug: https://bugs.gentoo.org/872821 + +Signed-off-by: Yixun Lan <dlan@gentoo.org> +--- + psinfo.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/psinfo.c b/psinfo.c +index 90a6d8f..05acedf 100644 +--- a/psinfo.c ++++ b/psinfo.c +@@ -172,14 +172,15 @@ int parse_proc_wchan(FILE * f, struct process_info *p) + int parse_proc_arrayfile(char *name, char ***s) + { + FILE *f; +- int res = 1; ++ int ret, res = 1; + + if ((f = fopen(name, "r")) != NULL) { + char *buf; + int len = 0, bufsize = 1024, count = 0; + + buf = malloc(bufsize); +- while ((buf[len++] = fgetc(f)) != EOF) { ++ while ((ret = fgetc(f)) != EOF) { ++ buf[len++] = ret & 0xFF; + if (buf[len - 1] == 0) { + *s = realloc(*s, (count + 2) * sizeof(char *)); + (*s)[count] = malloc(len); +@@ -673,8 +674,7 @@ void print_help() + int main(int argc, char **argv) + { + struct process_info *p; +- int pid, output_general = 0, output_cpu = 0, output_io = 0, output_memory = 0, output_privilege = 0, output_signal = 0, result = 0; +- char c; ++ int c, pid, output_general = 0, output_cpu = 0, output_io = 0, output_memory = 0, output_privilege = 0, output_signal = 0, result = 0; + + opterr = 0; + if (argc <= 1) { +-- +2.37.3 + diff --git a/sys-process/psinfo/psinfo-0.12-r1.ebuild b/sys-process/psinfo/psinfo-0.12-r1.ebuild index e6faa1baad15..fdf62188a826 100644 --- a/sys-process/psinfo/psinfo-0.12-r1.ebuild +++ b/sys-process/psinfo/psinfo-0.12-r1.ebuild @@ -1,4 +1,4 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI=7 @@ -15,6 +15,7 @@ LICENSE="GPL-2" PATCHES=( "${FILESDIR}/${P}-asneeded.patch" + "${FILESDIR}/${P}-char.patch" ) src_prepare() { |