about "implement fexecve from glibc"

Hello, About https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=858ffad21707622... I'm not sure why exactly sizeof(int)*3 in the following line: char buf[sizeof "/proc/self/fd/" + sizeof (int) * 3]; IIUC, this is supposed to give room for the ascii decimal representation of the file descriptor number. Maybe we could read the max file descriptor number configured in the kernel from "/proc/sys/fs/file-max" (or "/proc/sys/file-max" for old systems?). So: 1/ fopen("/proc/sys/fs/file-max", "r"); 2/ fscanf(fp, "%d", &fdmax); 3/ fdmax_length = log10(fdmax); Then use fdmax_length Or, much simpler: take for granted that fd is always an int, and thus max 32 bits, and hard code that max "string length" of a file descriptor is 10 chars. But in any case maybe add a comment on top of the line to explain the "magic number". Cheers! -- Yann

Hi Yann, Yann Sionneau wrote,
Hello,
About https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/commit/?id=858ffad21707622...
I'm not sure why exactly sizeof(int)*3 in the following line:
char buf[sizeof "/proc/self/fd/" + sizeof (int) * 3];
IIUC, this is supposed to give room for the ascii decimal representation of the file descriptor number.
Maybe we could read the max file descriptor number configured in the kernel from "/proc/sys/fs/file-max" (or "/proc/sys/file-max" for old systems?).
So:
1/ fopen("/proc/sys/fs/file-max", "r");
2/ fscanf(fp, "%d", &fdmax);
3/ fdmax_length = log10(fdmax);
Then use fdmax_length
Or, much simpler: take for granted that fd is always an int, and thus max 32 bits, and hard code that max "string length" of a file descriptor is 10 chars.
But in any case maybe add a comment on top of the line to explain the "magic number".
I checked with glibc/musl and both seems to use this magic number for granted. Could you sent a patch with a comment to the existing code? best regards Waldemar
participants (2)
-
Waldemar Brodkorb
-
Yann Sionneau