diff options
author | V3n3RiX <venerix@koprulu.sector> | 2022-09-26 15:08:09 +0100 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2022-09-26 15:08:09 +0100 |
commit | 2ad011cd42b40aebf90105be4521fb1727266d1d (patch) | |
tree | d9dc4f7c1665a6ba336ba8a9fa773f1292895b76 /sys-process/psinfo/files | |
parent | e0dcb1c4ea48292b379fadd53f55f1df42cf7eab (diff) |
gentoo auto-resync : 26:09:2022 - 15:08:08
Diffstat (limited to 'sys-process/psinfo/files')
-rw-r--r-- | sys-process/psinfo/files/psinfo-0.12-char.patch | 65 |
1 files changed, 65 insertions, 0 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 + |