Skip to contentSkip to conversation

New: prototype for execveat() in the documentation appears wrong

Bug 216876 [email protected] 1 participant 4 messages Jan 2, 2023 – May 19, 2023 Man-pages: manual pages for Linux -- Sections 2, 3, 4, 5, and 7

lore
Share & tools
lore
#0 lore raw

https://bugzilla.kernel.org/show_bug.cgi?id=216876

Bug ID: 216876
Summary: prototype for execveat() in the documentation appears
wrong
Product: Documentation
Version: unspecified
Hardware: All
OS: Linux
Status: NEW
Severity: low
Priority: P1
Component: man-pages
Assignee: [email protected]
Reporter: [email protected]
Regression: No

prototype for execveat() in the documentation is:

int execveat(int dirfd, const char *pathname,

                    const char *const argv[], const char *const envp[],
                    int flags);

This appears to be inconsistent with similar functions, other documentation, and my sources (latest Ubuntu distribution).

I think two of the "const" should be dropped so that we should have:

int execveat(int dirfd, const char *pathname,

                    char *const argv[], char *const envp[],
                    int flags);
Signature · 4 lines
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.
#1 lore raw

[Bug 216876] prototype for execveat() in the documentation appears wrong

https://bugzilla.kernel.org/show_bug.cgi?id=216876

--- Comment #1 from Florian Weimer ([email protected]) ---
* Alejandro Colomar via Libc-alpha:

Quoted 18 lines

It seems that glibc added a wrapper recently, and I didn't check that the prototype changed:

alx@asus5775:~/src/gnu/glibc$ grepc execveat
./posix/unistd.h:300:
extern int execveat (int __fd, const char *__path, char *const __argv[],
                     char *const __envp[], int __flags)
    __THROW __nonnull ((2, 3));

./sysdeps/unix/sysv/linux/execveat.c:25:
int
execveat (int dirfd, const char *path, char *const argv[], char *const envp[],
int flags)
{
/* Avoid implicit array coercion in syscall macros. */ return INLINE_SYSCALL_CALL (execveat, dirfd, path, &argv[0], &envp[0],

Quoted 5 lines
                            flags);
}

I CCd glibc so that they can comment.

POSIX uses these types for fexecve and execve, and it seemed right to be consistent with that.

There are several more manual pages which do not specify the correct
prototype: open, openat, prctl. I have received compiler bug reports when people used function pointers modeled after the declarations of open and prctl in the manual pages because of the ABI mismatch with the glibc implementations. The execveat difference is harmless in comparison.

Thanks,
Florian

Signature · 4 lines
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.
#2 lore raw

[Bug 216876] prototype for execveat() in the documentation appears wrong

In reply to [email protected]

https://bugzilla.kernel.org/show_bug.cgi?id=216876

--- Comment #2 from Alejandro Colomar ([email protected]) --- Fixed:
<https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/commit/man2/execveat.2?id=0c884c2c515d20c8ecf246eef5208dc748b98e65>

Signature · 4 lines
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.
#3 lore raw

[Bug 216876] prototype for execveat() in the documentation appears wrong

In reply to [email protected]

https://bugzilla.kernel.org/show_bug.cgi?id=216876

Alejandro Colomar ([email protected]) changed:

What |Removed |Added
----------------------------------------------------------------------------

             Status|NEW                         |RESOLVED
         Resolution|---                         |DOCUMENTED
Signature · 4 lines
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.