]>
Commit | Line | Data |
---|---|---|
57e1a277 KS |
1 | /* |
2 | * udev_libc_wrapper - wrapping of functions missing in a specific libc | |
3 | * or not working in a statically compiled binary | |
4 | * | |
5 | * Copyright (C) 2005 Kay Sievers <kay.sievers@vrfy.org> | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify it | |
8 | * under the terms of the GNU General Public License as published by the | |
9 | * Free Software Foundation version 2 of the License. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, but | |
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License along | |
17 | * with this program; if not, write to the Free Software Foundation, Inc., | |
18 | * 675 Mass Ave, Cambridge, MA 02139, USA. | |
19 | * | |
20 | */ | |
21 | ||
22 | #ifndef _UDEV_LIBC_WRAPPER_H_ | |
23 | #define _UDEV_LIBC_WRAPPER_H_ | |
24 | ||
40caaeec KS |
25 | #include <string.h> |
26 | #include <unistd.h> | |
c895fd00 KS |
27 | #include <stdint.h> |
28 | ||
29 | /* needed until Inotify! syscalls reach glibc */ | |
30 | #include <sys/syscall.h> | |
31 | #ifndef __NR_inotify_init | |
32 | #if defined(__i386__) | |
33 | # define __NR_inotify_init 291 | |
34 | # define __NR_inotify_add_watch 292 | |
35 | # define __NR_inotify_rm_watch 293 | |
36 | #elif defined(__x86_64__) | |
37 | # define __NR_inotify_init 253 | |
38 | # define __NR_inotify_add_watch 254 | |
39 | # define __NR_inotify_rm_watch 255 | |
40 | #elif defined(__powerpc__) || defined(__powerpc64__) | |
41 | # define __NR_inotify_init 275 | |
42 | # define __NR_inotify_add_watch 276 | |
43 | # define __NR_inotify_rm_watch 277 | |
44 | #elif defined (__ia64__) | |
45 | # define __NR_inotify_init 1277 | |
46 | # define __NR_inotify_add_watch 1278 | |
47 | # define __NR_inotify_rm_watch 1279 | |
48 | #elif defined (__s390__) | |
49 | # define __NR_inotify_init 284 | |
50 | # define __NR_inotify_add_watch 285 | |
51 | # define __NR_inotify_rm_watch 286 | |
52 | #elif defined (__alpha__) | |
53 | # define __NR_inotify_init 444 | |
54 | # define __NR_inotify_add_watch 445 | |
55 | # define __NR_inotify_rm_watch 446 | |
56 | #elif defined (__sparc__) || defined (__sparc64__) | |
57 | # define __NR_inotify_init 151 | |
58 | # define __NR_inotify_add_watch 152 | |
59 | # define __NR_inotify_rm_watch 156 | |
60 | #elif defined (__arm__) | |
61 | # define __NR_inotify_init 316 | |
62 | # define __NR_inotify_add_watch 317 | |
63 | # define __NR_inotify_rm_watch 318 | |
64 | #elif defined (__sh__) | |
65 | # define __NR_inotify_init 290 | |
66 | # define __NR_inotify_add_watch 291 | |
67 | # define __NR_inotify_rm_watch 292 | |
68 | #else | |
29ed5bf4 | 69 | #warning "inotify unsupported on this architecture!" |
c895fd00 KS |
70 | #endif |
71 | #endif /* __NR_inotify_init */ | |
72 | ||
29ed5bf4 KS |
73 | /* dummy if we don't have the syscalls defined */ |
74 | #ifndef __NR_inotify_init | |
75 | static inline int inotify_init(void) | |
76 | { | |
77 | return -1; | |
78 | } | |
79 | ||
80 | static inline int inotify_add_watch(int fd, const char *name, uint32_t mask) | |
81 | { | |
82 | return -1; | |
83 | } | |
84 | #else | |
c895fd00 KS |
85 | /* needed until /usr/include/sys/inotify.h is working */ |
86 | #ifdef __KLIBC__ | |
87 | #include <sys/inotify.h> | |
88 | #else | |
89 | static inline int inotify_init(void) | |
90 | { | |
91 | return syscall(__NR_inotify_init); | |
92 | } | |
93 | ||
94 | static inline int inotify_add_watch(int fd, const char *name, uint32_t mask) | |
95 | { | |
96 | return syscall(__NR_inotify_add_watch, fd, name, mask); | |
97 | } | |
29ed5bf4 KS |
98 | #endif /* __KLIBC__ */ |
99 | #endif /* __NR_inotify_init */ | |
100 | ||
101 | #ifndef IN_CREATE | |
c895fd00 KS |
102 | #define IN_CREATE 0x00000100 /* Subfile was created */ |
103 | #define IN_MOVED_FROM 0x00000040 /* File was moved from X */ | |
104 | #define IN_MOVED_TO 0x00000080 /* File was moved to Y */ | |
105 | #define IN_DELETE 0x00000200 /* Subfile was deleted */ | |
106 | #define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed */ | |
107 | #define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */ | |
29ed5bf4 | 108 | #endif /* IN_CREATE */ |
40caaeec KS |
109 | |
110 | /* needed for our signal handlers to work */ | |
138068d6 | 111 | #undef asmlinkage |
63f61c5c | 112 | #ifdef __i386__ |
138068d6 KS |
113 | #define asmlinkage __attribute__((regparm(0))) |
114 | #else | |
115 | #define asmlinkage | |
c895fd00 | 116 | #endif /* __i386__ */ |
138068d6 | 117 | |
40caaeec | 118 | /* headers are broken on some lazy platforms */ |
138068d6 KS |
119 | #ifndef __FD_SET |
120 | #define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d)) | |
121 | #endif | |
122 | #ifndef __FD_CLR | |
123 | #define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d)) | |
124 | #endif | |
125 | #ifndef __FD_ISSET | |
126 | #define __FD_ISSET(d, set) (((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) != 0) | |
63f61c5c | 127 | #endif |
138068d6 KS |
128 | #ifndef __FD_ZERO |
129 | #define __FD_ZERO(set) ((void) memset ((void*) (set), 0, sizeof (fd_set))) | |
63f61c5c KS |
130 | #endif |
131 | ||
40caaeec | 132 | /* missing in some lazy distros */ |
47e353f9 KS |
133 | #ifndef NETLINK_KOBJECT_UEVENT |
134 | #define NETLINK_KOBJECT_UEVENT 15 | |
135 | #endif | |
136 | ||
a5c606f6 | 137 | #ifndef SO_RCVBUFFORCE |
55977603 KM |
138 | #if defined(__alpha__) || defined(__hppa__) || defined(__sparc__) || defined(__sparc_v9__) |
139 | #define SO_RCVBUFFORCE 0x100b | |
140 | #else | |
a5c606f6 KS |
141 | #define SO_RCVBUFFORCE 33 |
142 | #endif | |
55977603 | 143 | #endif |
a5c606f6 | 144 | |
57e1a277 KS |
145 | extern uid_t lookup_user(const char *user); |
146 | extern gid_t lookup_group(const char *group); | |
147 | ||
63f61c5c | 148 | extern size_t strlcpy(char *dst, const char *src, size_t size); |
63f61c5c | 149 | extern size_t strlcat(char *dst, const char *src, size_t size); |
63f61c5c | 150 | |
57e1a277 | 151 | #endif /* _UDEV_LIBC_WRAPPER_H_ */ |