mirror of
https://review.haiku-os.org/haiku
synced 2024-11-23 07:18:40 +01:00
libroot: Use use variable argument count macro for ioctl.
Based on X512's original change, but with more modifications: * Don't use _ in macro parameter names to appease GCC 2. * Get rid of ioctl_args struct. We don't need it anymore, and just adding parameters of the same types has the exact same ABI on x86 and x86_64, so this doesn't break any existing compiled code. * Add (void*) cast to third parameter. * Enable for _KERNEL_MODE also. Change-Id: Id4ad8b85f54836fd26dc6278226954d0a081d5f0 Reviewed-on: https://review.haiku-os.org/c/haiku/+/8533 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
This commit is contained in:
parent
b802b65b09
commit
bbb069a1a7
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2004-2015 Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2004-2024, Haiku, Inc. All rights reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _UNISTD_H_
|
||||
@ -361,21 +361,20 @@ extern int symlinkat(const char *toPath, int fd, const char *symlinkPath);
|
||||
|
||||
extern int ftruncate(int fd, off_t newSize);
|
||||
extern int truncate(const char *path, off_t newSize);
|
||||
struct ioctl_args {
|
||||
void* argument;
|
||||
size_t size;
|
||||
};
|
||||
int __ioctl(int fd, ulong cmd, struct ioctl_args args);
|
||||
|
||||
extern int __ioctl(int fd, ulong cmd, void* argument, size_t size);
|
||||
#ifndef __cplusplus
|
||||
extern int ioctl(int fd, unsigned long op, ...);
|
||||
#ifndef _KERNEL_MODE
|
||||
#define ioctl(a, b, c...) __ioctl(a, b, (struct ioctl_args){ c })
|
||||
#endif
|
||||
#define _IOCTL2(a, b) __ioctl(a, b, NULL, 0)
|
||||
#define _IOCTL3(a, b, c) __ioctl(a, b, (void*)c, 0)
|
||||
#define _IOCTL4(a, b, c, d) __ioctl(a, b, (void*)c, d)
|
||||
#define _IOCTL(ARG1, ARG2, ARG3, ARG4, NAME, ...) NAME
|
||||
#define ioctl(...) _IOCTL(__VA_ARGS__, _IOCTL4, _IOCTL3, _IOCTL2)(__VA_ARGS__)
|
||||
#else
|
||||
inline int
|
||||
ioctl(int fd, unsigned long op, void* argument = NULL, size_t size = 0)
|
||||
{
|
||||
return __ioctl(fd, op, (struct ioctl_args){ argument, size });
|
||||
return __ioctl(fd, op, argument, size);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -14,9 +14,9 @@
|
||||
|
||||
|
||||
int
|
||||
__ioctl(int fd, ulong cmd, struct ioctl_args args)
|
||||
__ioctl(int fd, ulong cmd, void* argument, size_t size)
|
||||
{
|
||||
RETURN_AND_SET_ERRNO(_kern_ioctl(fd, cmd, args.argument, args.size));
|
||||
RETURN_AND_SET_ERRNO(_kern_ioctl(fd, cmd, argument, size));
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user