Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Backports:SLE-15-SP5:Update
fakeroot
0001-glibc-2.33-compatibility-fixes.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-glibc-2.33-compatibility-fixes.patch of Package fakeroot
From f91abea8f685776a29d40382a35301f6980c953b Mon Sep 17 00:00:00 2001 From: Christophe Giboudeaux <christophe@krop.fr> Date: Wed, 17 Mar 2021 15:53:12 +0100 Subject: [PATCH] glibc 2.33 compatibility fixes Source: https://salsa.debian.org/clint/fakeroot/-/merge_requests/10 --- configure.ac | 17 +++++------ libfakeroot.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++-- wrapawk_macosx | 10 +++++-- wrapfunc.inp | 4 +-- 4 files changed, 94 insertions(+), 15 deletions(-) diff --git a/configure.ac b/configure.ac index 73415d2..35f9ecf 100644 --- a/configure.ac +++ b/configure.ac @@ -146,6 +146,7 @@ for first in size_t int; do #include <sys/types.h> #endif #include <unistd.h> +#include <stdio.h> #ifdef HAVE_GRP_H #include <grp.h> #endif @@ -183,13 +184,13 @@ AC_MSG_CHECKING([for type of arg of __xmknod]) ]], [[ int __xmknod ( int ver, const char *pathname , - mode_t mode , dev_t dev); + mode_t mode , dev_t *dev); ]])],[ - AC_DEFINE(XMKNOD_FRTH_ARG,) - AC_MSG_RESULT([no extra *]) - ],[ AC_DEFINE(XMKNOD_FRTH_ARG,[*]) AC_MSG_RESULT([needs *]) + ],[ + AC_DEFINE(XMKNOD_FRTH_ARG,) + AC_MSG_RESULT([no extra *]) ]) @@ -210,13 +211,13 @@ AC_MSG_CHECKING([for type of arg of __xmknodat]) int __xmknodat ( int ver, int dirfd, const char *pathname , - mode_t mode , dev_t dev); + mode_t mode , dev_t *dev); ]])],[ - AC_DEFINE(XMKNODAT_FIFTH_ARG,) - AC_MSG_RESULT([no extra *]) - ],[ AC_DEFINE(XMKNODAT_FIFTH_ARG,[*]) AC_MSG_RESULT([needs *]) + ],[ + AC_DEFINE(XMKNODAT_FIFTH_ARG,) + AC_MSG_RESULT([no extra *]) ]) diff --git a/libfakeroot.c b/libfakeroot.c index 7f13286..c7014aa 100644 --- a/libfakeroot.c +++ b/libfakeroot.c @@ -90,6 +90,16 @@ #define SEND_GET_XATTR64(a,b,c) send_get_xattr64(a,b) #endif +#ifndef _STAT_VER + #if defined (__aarch64__) + #define _STAT_VER 0 + #elif defined (__x86_64__) + #define _STAT_VER 1 + #else + #define _STAT_VER 3 + #endif +#endif + /* These INT_* (which stands for internal) macros should always be used when the fakeroot library owns the storage of the stat variable. @@ -112,8 +122,16 @@ #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) #define INT_SEND_GET_STAT(a,b) SEND_GET_STAT(a,b) + +/* 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> @@ -125,7 +143,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 */ @@ -188,6 +205,15 @@ extern int unsetenv (const char *name); #undef __lxstat64 #undef _FILE_OFFSET_BITS + +#ifndef AT_EMPTY_PATH +#define AT_EMPTY_PATH 0 +#endif + +#ifndef AT_NO_AUTOMOUNT +#define AT_NO_AUTOMOUNT 0 +#endif + /* // next_wrap_st: // this structure is used in next_wrap, which is defined in @@ -1342,6 +1368,54 @@ int renameat(int olddir_fd, const char *oldpath, #endif /* HAVE_FSTATAT */ +#if defined(__GLIBC__) && __GLIBC_PREREQ(2,33) +/* Glibc 2.33 exports symbols for these functions in the shared lib */ + int lstat(const char *file_name, struct stat *statbuf) { + return WRAP_LSTAT LSTAT_ARG(_STAT_VER, file_name, statbuf); + } + int stat(const char *file_name, struct stat *st) { + return WRAP_STAT STAT_ARG(_STAT_VER, file_name, st); + } + int fstat(int fd, struct stat *st) { + return WRAP_FSTAT FSTAT_ARG(_STAT_VER, fd, st); + } + + #ifdef HAVE_FSTATAT + int fstatat(int dir_fd, const char *path, struct stat *st, int flags) { + return WRAP_FSTATAT FSTATAT_ARG(_STAT_VER, dir_fd, path, st, flags); + } + #endif + + #ifdef STAT64_SUPPORT + int lstat64(const char *file_name, struct stat64 *st) { + return WRAP_LSTAT64 LSTAT64_ARG(_STAT_VER, file_name, st); + } + int stat64(const char *file_name, struct stat64 *st) { + return WRAP_STAT64 STAT64_ARG(_STAT_VER, file_name, st); + } + int fstat64(int fd, struct stat64 *st) { + return WRAP_FSTAT64 FSTAT64_ARG(_STAT_VER, fd, st); + } + + #ifdef HAVE_FSTATAT + int fstatat64(int dir_fd, const char *path, struct stat64 *st, int flags) { + return WRAP_FSTATAT64 FSTATAT64_ARG(_STAT_VER, dir_fd, path, st, flags); + } + #endif + #endif + + int mknod(const char *pathname, mode_t mode, dev_t dev) { + return WRAP_MKNOD MKNOD_ARG(_STAT_VER, pathname, mode, &dev); + } + + #if defined(HAVE_FSTATAT) && defined(HAVE_MKNODAT) + int mknodat(int dir_fd, const char *pathname, mode_t mode, dev_t dev) { + return WRAP_MKNODAT MKNODAT_ARG(_STAT_VER, dir_fd, pathname, mode, &dev); + } + #endif +#endif /* GLIBC_PREREQ */ + + #ifdef FAKEROOT_FAKENET pid_t fork(void) { @@ -1911,7 +1985,7 @@ ssize_t fremovexattr(int fd, const char *name) } #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); diff --git a/wrapawk_macosx b/wrapawk_macosx index 088a7f4..f783219 100644 --- 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; diff --git a/wrapfunc.inp b/wrapfunc.inp index f7ad186..556af34 100644 --- a/wrapfunc.inp +++ b/wrapfunc.inp @@ -146,7 +146,7 @@ setfsgid;gid_t;(gid_t fsgid);(fsgid) initgroups;int;(const char *user, INITGROUPS_SECOND_ARG group);(user, group) getgroups;int;(int size, gid_t list[]);(size, list) 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 */ @@ -198,7 +198,7 @@ fchownat;int;(int dir_fd, const char *path, uid_t owner, gid_t group, int flags) 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) -- 2.30.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor