[74318] trunk/base/src/darwintracelib1.0
Jeremy Huddleston
jeremyhu at macports.org
Mon Dec 13 13:14:21 PST 2010
This will fail for __DARWIN_ONLY_64_BIT_INO_T configurations.
I suggest that you don't set _DARWIN_NO_64_BIT_INODE in CPPFLAGS in the Makefile and instead do this first (not tested, but you should be able to get the point):
#include <sys/cdefs.h>
#if defined(_DARWIN_FEATURE_64_BIT_INODE) && !defined(_DARWIN_FEATURE_ONLY_64_BIT_INODE)
// The architecture we're building for has multiple versions of stat.
// We need to undo sys/cdefs.h changes for _DARWIN_FEATURE_64_BIT_INODE
#define __DARWIN_64_BIT_INO_T 0
#define __DARWIN_SUF_64_BIT_INO_T ""
#undef _DARWIN_FEATURE_64_BIT_INODE
#endif
then put all the stat64 and lstat64 bits inside:
#ifndef _DARWIN_FEATURE_ONLY_64_BIT_INODE
...
#endif
--Jeremy
On Dec 12, 2010, at 01:30, jmr at macports.org wrote:
> Revision: 74318
> http://trac.macports.org/changeset/74318
> Author: jmr at macports.org
> Date: 2010-12-12 01:30:21 -0800 (Sun, 12 Dec 2010)
> Log Message:
> -----------
> wrap stat64 and lstat64 in darwintracelib (fixes #21582)
>
> Modified Paths:
> --------------
> trunk/base/src/darwintracelib1.0/Makefile
> trunk/base/src/darwintracelib1.0/darwintrace.c
>
> Modified: trunk/base/src/darwintracelib1.0/Makefile
> ===================================================================
> --- trunk/base/src/darwintracelib1.0/Makefile 2010-12-12 05:16:24 UTC (rev 74317)
> +++ trunk/base/src/darwintracelib1.0/Makefile 2010-12-12 09:30:21 UTC (rev 74318)
> @@ -7,6 +7,8 @@
> include ../../Mk/macports.autoconf.mk
>
> CFLAGS+= -fPIC
> +# will need to update this to cope with 64-bit inodes someday
> +CPPFLAGS+= -D_DARWIN_NO_64_BIT_INODE
>
> all:: ${SHLIB_NAME}
>
>
> Modified: trunk/base/src/darwintracelib1.0/darwintrace.c
> ===================================================================
> --- trunk/base/src/darwintracelib1.0/darwintrace.c 2010-12-12 05:16:24 UTC (rev 74317)
> +++ trunk/base/src/darwintracelib1.0/darwintrace.c 2010-12-12 09:30:21 UTC (rev 74318)
> @@ -465,6 +465,8 @@
> */
> static int is_directory(const char * path)
> {
> +/* will need to update this to cope with 64-bit inodes someday - for now, we
> + build with -D_DARWIN_NO_64_BIT_INODE */
> #define stat(path, sb) syscall(SYS_stat, path, sb)
> struct stat s;
> if(stat(path, &s)==-1)
> @@ -920,9 +922,37 @@
> #undef stat
> }
>
> +int stat64(const char * path, struct stat64 * sb)
> +{
> +#define stat64(path, sb) syscall(SYS_stat64, path, sb)
> + int result=0;
> + char newpath[260];
> +
> + *newpath=0;
> + if(!is_directory(path)&&__darwintrace_is_in_sandbox(path, newpath)==0)
> + {
> + errno=ENOENT;
> + result=-1;
> + }else
> + {
> + if(*newpath)
> + path=newpath;
> +
> + result=stat64(path, sb);
> + }
> +
> + return result;
> +#undef stat64
> +}
> +
> +int stat$INODE64(const char * path, struct stat64 * sb)
> +{
> + return stat64(path, sb);
> +}
> +
> int lstat(const char * path, struct stat * sb)
> {
> -#define stat(path, sb) syscall(SYS_lstat, path, sb)
> +#define lstat(path, sb) syscall(SYS_lstat, path, sb)
> int result=0;
> char newpath[260];
>
> @@ -936,9 +966,37 @@
> if(*newpath)
> path=newpath;
>
> - result=stat(path, sb);
> + result=lstat(path, sb);
> }
>
> return result;
> -#undef stat
> +#undef lstat
> }
> +
> +int lstat64(const char * path, struct stat64 * sb)
> +{
> +#define lstat64(path, sb) syscall(SYS_lstat64, path, sb)
> + int result=0;
> + char newpath[260];
> +
> + *newpath=0;
> + if(!is_directory(path)&&__darwintrace_is_in_sandbox(path, newpath)==0)
> + {
> + errno=ENOENT;
> + result=-1;
> + }else
> + {
> + if(*newpath)
> + path=newpath;
> +
> + result=lstat64(path, sb);
> + }
> +
> + return result;
> +#undef lstat64
> +}
> +
> +int lstat$INODE64(const char * path, struct stat64 * sb)
> +{
> + return lstat64(path, sb);
> +}
> _______________________________________________
> macports-changes mailing list
> macports-changes at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macports-changes
More information about the macports-dev
mailing list