aboutsummaryrefslogtreecommitdiffstats
path: root/tools/fakeroot/patches/100-portability.patch
blob: 3835a7792bd1bcc9a6831d15073d9498407cea52 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
--- a/libfakeroot.c
+++ b/libfakeroot.c
@@ -110,8 +110,16 @@
 #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT(_STAT_VER,a,b,c,d)
 #define INT_SEND_STAT(a,b) SEND_STAT(a,b,_STAT_VER)
 #define INT_SEND_GET_XATTR(a,b) SEND_GET_XATTR(a,b,_STAT_VER)
+
+/* 10.10 uses id_t in getpriority/setpriority calls, so pretend
+   id_t is used everywhere, just happens to be int on some OSes */
+#ifndef _ID_T
+#define _ID_T
+typedef int id_t;
+#endif
 #endif
 
+#include <sys/types.h>
 #include <stdlib.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
@@ -123,7 +131,6 @@
 #include <unistd.h>
 #include <dirent.h>
 #include <errno.h>
-#include <sys/types.h>
 #ifdef HAVE_SYS_ACL_H
 #include <sys/acl.h>
 #endif /* HAVE_SYS_ACL_H */
@@ -1894,7 +1901,7 @@ ssize_t fremovexattr(int fd, const char
 }
 #endif /* HAVE_FREMOVEXATTR */
 
-int setpriority(int which, int who, int prio){
+int setpriority(int which, id_t who, int prio){
   if (fakeroot_disabled)
     return next_setpriority(which, who, prio);
   next_setpriority(which, who, prio);
@@ -2426,3 +2433,19 @@ int sysinfo(int command, char *buf, long
     }
 }
 #endif
+
+#ifdef HAVE_OPENAT
+int openat(int dir_fd, const char *pathname, int flags, ...)
+{
+	mode_t mode;
+
+    if (flags & O_CREAT) {
+        va_list args;
+        va_start(args, flags);
+        mode = va_arg(args, int);
+        va_end(args);
+    }
+
+    return next_openat(dir_fd, pathname, flags, mode);
+}
+#endif
--- a/wrapfunc.inp
+++ b/wrapfunc.inp
@@ -145,7 +145,7 @@ setfsgid;gid_t;(gid_t fsgid);(fsgid)
 #endif /* HAVE_SETFSGID */
 initgroups;int;(const char *user, INITGROUPS_SECOND_ARG group);(user, group)
 setgroups;int;(SETGROUPS_SIZE_TYPE size, const gid_t *list);(size, list)
-setpriority;int;(int which, int who, int prio);(which, who, prio)
+setpriority;int;(int which, id_t who, int prio);(which, who, prio)
 #ifdef HAVE_CAPSET
 capset;int;(cap_user_header_t hdrp, const cap_user_data_t datap);(hdrp, datap)
 #endif /* HAVE_CAPSET */
@@ -197,7 +197,7 @@ fchownat;int;(int dir_fd, const char *pa
 mkdirat;int;(int dir_fd, const char *pathname, mode_t mode);(dir_fd, pathname, mode)
 #endif /* HAVE_MKDIRAT */
 #ifdef HAVE_OPENAT
-openat;int;(int dir_fd, const char *pathname, int flags);(dir_fd, pathname, flags)
+openat;int;(int dir_fd, const char *pathname, int flags, mode_t mode);(dir_fd, pathname, flags, mode);;(int dir_fd, const char *pathname, int flags, ...)
 #endif /* HAVE_OPENAT */
 #ifdef HAVE_RENAMEAT
 renameat;int;(int olddir_fd, const char *oldpath, int newdir_fd, const char *newpath);(olddir_fd, oldpath, newdir_fd, newpath)
--- a/wrapawk_macosx
+++ b/wrapawk_macosx
@@ -46,26 +46,30 @@ BEGIN{
   argtype=$3;
   argname=$4;
   MACRO=$5;
+  argtype_def=$6
+  if(!argtype_def) {
+    argtype_def = argtype
+  }
   if(MACRO){
     print "extern " ret " MY_DEF(" name ")" argtype " __attribute__((visibility(\"hidden\")));" > headerfile;
     print "INTERPOSE(MY_DEF(" name "_RAW)," name "_RAW);"   > structfile;
     print "#undef " name                      > deffile
     print "#define " name " MY_DEF(" name "_RAW)" > deffile
 
-    print "extern " ret, name, argtype ";"              > tmpffile;
+    print "extern " ret, name, argtype_def ";"          > tmpffile;
     print "static __inline__ " ret " NEXT_" MACRO "_NOARG " argtype " __attribute__((always_inline));" > tmpffile;
     print "static __inline__ " ret " NEXT_" MACRO "_NOARG " argtype " {" > tmpffile;
     print "  return " name, argname ";"                 > tmpffile;
     print "}"                                           > tmpffile;
     print ""                                            > tmpffile;
   } else {
-    print "extern " ret " my_" name, argtype " __attribute__((visibility(\"hidden\")));" > headerfile;
+    print "extern " ret " my_" name, argtype_def " __attribute__((visibility(\"hidden\")));" > headerfile;
     print "#undef " name                                > structfile;
     print "INTERPOSE(my_" name "," name ");"            > structfile;
     print "#define " name " my_" name                   > structfile
     print "#define " name " my_" name                   > deffile
 
-    print "extern " ret, name, argtype ";"              > tmpffile;
+    print "extern " ret, name, argtype_def ";"          > tmpffile;
     if(argname){
         print "static __inline__ " ret " next_" name, argtype " __attribute__((always_inline));" > tmpffile;
         print "static __inline__ " ret " next_" name, argtype " {" > tmpffile;