chiark / gitweb /
080 release
[elogind.git] / udev_libc_wrapper.h
index 65f4e01c2340077b9ce9b876905e546f0d90da87..a4d320fef2dad37b6f32bbcc7c179422ed1bd616 100644 (file)
 #ifndef _UDEV_LIBC_WRAPPER_H_
 #define _UDEV_LIBC_WRAPPER_H_
 
-#ifdef asmlinkage
-# undef asmlinkage
+#include <string.h>
+#include <unistd.h>
+#include <stdint.h>
+
+/* needed until Inotify! syscalls reach glibc */
+#include <sys/syscall.h>
+#ifndef __NR_inotify_init
+#if defined(__i386__)
+# define __NR_inotify_init     291
+# define __NR_inotify_add_watch        292
+# define __NR_inotify_rm_watch 293
+#elif defined(__x86_64__)
+# define __NR_inotify_init     253
+# define __NR_inotify_add_watch        254
+# define __NR_inotify_rm_watch 255
+#elif defined(__powerpc__) || defined(__powerpc64__)
+# define __NR_inotify_init     275
+# define __NR_inotify_add_watch        276
+# define __NR_inotify_rm_watch 277
+#elif defined (__ia64__)
+# define __NR_inotify_init     1277
+# define __NR_inotify_add_watch        1278
+# define __NR_inotify_rm_watch 1279
+#elif defined (__s390__)
+# define __NR_inotify_init     284
+# define __NR_inotify_add_watch        285
+# define __NR_inotify_rm_watch 286
+#elif defined (__alpha__)
+# define __NR_inotify_init     444
+# define __NR_inotify_add_watch        445
+# define __NR_inotify_rm_watch 446
+#elif defined (__sparc__) || defined (__sparc64__)
+# define __NR_inotify_init     151
+# define __NR_inotify_add_watch        152
+# define __NR_inotify_rm_watch 156
+#elif defined (__arm__)
+# define __NR_inotify_init     316
+# define __NR_inotify_add_watch        317
+# define __NR_inotify_rm_watch 318
+#elif defined (__sh__)
+# define __NR_inotify_init     290
+# define __NR_inotify_add_watch        291
+# define __NR_inotify_rm_watch 292
+#else
+#warning "inotify unsupported on this architecture!"
 #endif
+#endif /* __NR_inotify_init */
+
+/* dummy if we don't have the syscalls defined */
+#ifndef __NR_inotify_init
+static inline int inotify_init(void)
+{
+       return -1;
+}
+
+static inline int inotify_add_watch(int fd, const char *name, uint32_t mask)
+{
+       return -1;
+}
+#else
+/* needed until /usr/include/sys/inotify.h is working */
+#ifdef __KLIBC__
+#include <sys/inotify.h>
+#else
+static inline int inotify_init(void)
+{
+       return syscall(__NR_inotify_init);
+}
+
+static inline int inotify_add_watch(int fd, const char *name, uint32_t mask)
+{
+       return syscall(__NR_inotify_add_watch, fd, name, mask);
+}
+#endif /* __KLIBC__ */
+#endif /* __NR_inotify_init */
+
+#ifndef IN_CREATE
+#define IN_CREATE              0x00000100      /* Subfile was created */
+#define IN_MOVED_FROM          0x00000040      /* File was moved from X */
+#define IN_MOVED_TO            0x00000080      /* File was moved to Y */
+#define IN_DELETE              0x00000200      /* Subfile was deleted */
+#define IN_CLOSE_WRITE         0x00000008      /* Writtable file was closed */
+#define IN_MOVE                        (IN_MOVED_FROM | IN_MOVED_TO) /* moves */
+#endif /* IN_CREATE */
+
+/* needed for our signal handlers to work */
+#undef asmlinkage
 #ifdef __i386__
-# define asmlinkage    __attribute__((regparm(0)))
+#define asmlinkage     __attribute__((regparm(0)))
+#else
+#define asmlinkage
+#endif /* __i386__ */
+
+/* headers are broken on some lazy platforms */
+#ifndef __FD_SET
+#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
+#endif
+#ifndef __FD_CLR
+#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
 #endif
-#ifndef asmlinkage
-# define asmlinkage
+#ifndef __FD_ISSET
+#define __FD_ISSET(d, set) (((set)->fds_bits[__FDELT(d)] & __FDMASK(d)) != 0)
+#endif
+#ifndef __FD_ZERO
+#define __FD_ZERO(set) ((void) memset ((void*) (set), 0, sizeof (fd_set)))
 #endif
 
-#include <string.h>
+/* missing in some lazy distros */
+#ifndef NETLINK_KOBJECT_UEVENT
+#define NETLINK_KOBJECT_UEVENT 15
+#endif
+
+#ifndef SO_RCVBUFFORCE
+#define SO_RCVBUFFORCE 33
+#endif
 
 extern uid_t lookup_user(const char *user);
 extern gid_t lookup_group(const char *group);
 
-#ifndef strlcat
 extern size_t strlcpy(char *dst, const char *src, size_t size);
-#endif
-
-#ifndef strlcat
 extern size_t strlcat(char *dst, const char *src, size_t size);
-#endif
 
 #endif /* _UDEV_LIBC_WRAPPER_H_ */