On Wed, Nov 01, 2023 at 02:02:12PM +0000, Helge Kreutzmann wrote: > Without further ado, the following was found: > > Issue: the link target → link target Fixed: <https://www.alejandro-colomar.es/src/alx/linux/man-pages/man-pages.git/commit/?h=contrib&id=1a2af84e62456a6ae29f1a1e1f73d761189065be> Thanks, Alex > > "#include E<lt>limits.hE<gt>\n" > "#include E<lt>stdio.hE<gt>\n" > "#include E<lt>stdlib.hE<gt>\n" > "#include E<lt>sys/stat.hE<gt>\n" > "#include E<lt>unistd.hE<gt>\n" > "\\&\n" > "int\n" > "main(int argc, char *argv[])\n" > "{\n" > " char *buf;\n" > " ssize_t nbytes, bufsiz;\n" > " struct stat sb;\n" > "\\&\n" > " if (argc != 2) {\n" > " fprintf(stderr, \"Usage: %s E<lt>pathnameE<gt>\\en\", argv[0]);\n" > " exit(EXIT_FAILURE);\n" > " }\n" > "\\&\n" > " if (lstat(argv[1], &sb) == -1) {\n" > " perror(\"lstat\");\n" > " exit(EXIT_FAILURE);\n" > " }\n" > "\\&\n" > " /* Add one to the link size, so that we can determine whether\n" > " the buffer returned by readlink() was truncated. */\n" > "\\&\n" > " bufsiz = sb.st_size + 1;\n" > "\\&\n" > " /* Some magic symlinks under (for example) /proc and /sys\n" > " report \\[aq]st_size\\[aq] as zero. In that case, take PATH_MAX as\n" > " a \"good enough\" estimate. */\n" > "\\&\n" > " if (sb.st_size == 0)\n" > " bufsiz = PATH_MAX;\n" > "\\&\n" > " buf = malloc(bufsiz);\n" > " if (buf == NULL) {\n" > " perror(\"malloc\");\n" > " exit(EXIT_FAILURE);\n" > " }\n" > "\\&\n" > " nbytes = readlink(argv[1], buf, bufsiz);\n" > " if (nbytes == -1) {\n" > " perror(\"readlink\");\n" > " exit(EXIT_FAILURE);\n" > " }\n" > "\\&\n" > " /* Print only \\[aq]nbytes\\[aq] of \\[aq]buf\\[aq], as it doesn't contain a terminating\n" > " null byte (\\[aq]\\e0\\[aq]). */\n" > " printf(\"\\[aq]%s\\[aq] points to \\[aq]%.*s\\[aq]\\en\", argv[1], (int) nbytes, buf);\n" > "\\&\n" > " /* If the return value was equal to the buffer size, then the\n" > " the link target was larger than expected (perhaps because the\n" > " target was changed between the call to lstat() and the call to\n" > " readlink()). Warn the user that the returned target may have\n" > " been truncated. */\n" > "\\&\n" > " if (nbytes == bufsiz)\n" > " printf(\"(Returned buffer may have been truncated)\\en\");\n" > "\\&\n" > " free(buf);\n" > " exit(EXIT_SUCCESS);\n" > "}\n" -- <https://www.alejandro-colomar.es/>
Attachment:
signature.asc
Description: PGP signature