Re: Issue in man page readlink.2

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux