From 143bb18701167817d218ea7027365a274f6433f4 Mon Sep 17 00:00:00 2001 From: Ben Summers Date: Thu, 5 Jan 2006 22:01:34 +0000 Subject: Fix for Darwin: xattr support, remove nasty assembler intercept code, cosmetic in configure --- configure.ac | 2 + infrastructure/BoxPlatform.pm.in | 2 +- lib/backupclient/BackupClientFileAttributes.cpp | 13 ++ test/raidfile/Darwin-SYS.h | 167 ------------------------ test/raidfile/Makefile.extra.Darwin | 6 - test/raidfile/make-darwin-intercepts.pl | 46 ------- 6 files changed, 16 insertions(+), 220 deletions(-) delete mode 100644 test/raidfile/Darwin-SYS.h delete mode 100644 test/raidfile/Makefile.extra.Darwin delete mode 100755 test/raidfile/make-darwin-intercepts.pl diff --git a/configure.ac b/configure.ac index 6f334be7..8cb0d945 100644 --- a/configure.ac +++ b/configure.ac @@ -125,6 +125,8 @@ AC_FUNC_STAT AC_CHECK_FUNCS([getpeereid kqueue lchown setproctitle]) AX_FUNC_SYSCALL AX_CHECK_SYSCALL_LSEEK +AC_CHECK_FUNCS([listxattr llistxattr getxattr lgetxattr setxattr lsetxattr]) +AC_CHECK_DECLS([XATTR_NOFOLLOW],,, [[#include ]]) ### Miscellaneous complicated feature checks diff --git a/infrastructure/BoxPlatform.pm.in b/infrastructure/BoxPlatform.pm.in index e3a1a26a..d63d1684 100644 --- a/infrastructure/BoxPlatform.pm.in +++ b/infrastructure/BoxPlatform.pm.in @@ -51,7 +51,7 @@ BEGIN # test for fink installation if(-d '/sw/include' && -d '/sw/lib') { - print "Fink installation detected, will use headers and libraries\n"; + print "Fink installation detected, will use headers and libraries\n\n\n"; $platform_compile_line_extra = '-I/sw/include '; $platform_link_line_extra = '-L/sw/lib '; } diff --git a/lib/backupclient/BackupClientFileAttributes.cpp b/lib/backupclient/BackupClientFileAttributes.cpp index 7b7cd216..4fbdd90a 100644 --- a/lib/backupclient/BackupClientFileAttributes.cpp +++ b/lib/backupclient/BackupClientFileAttributes.cpp @@ -33,6 +33,19 @@ #include "MemLeakFindOn.h" +// Handle differing xattr APIs +#ifdef HAVE_SYS_XATTR_H + #if !defined(HAVE_LLISTXATTR) && defined(HAVE_LISTXATTR) && HAVE_DECL_XATTR_NOFOLLOW + #define llistxattr(a,b,c) listxattr(a,b,c,XATTR_NOFOLLOW) + #endif + #if !defined(HAVE_LGETXATTR) && defined(HAVE_GETXATTR) && HAVE_DECL_XATTR_NOFOLLOW + #define lgetxattr(a,b,c,d) getxattr(a,b,c,d,0,XATTR_NOFOLLOW) + #endif + #if !defined(HAVE_LSETXATTR) && defined(HAVE_SETXATTR) && HAVE_DECL_XATTR_NOFOLLOW + #define lsetxattr(a,b,c,d,e) setxattr(a,b,c,d,0,(e)|XATTR_NOFOLLOW) + #endif +#endif + // set packing to one byte #ifdef STRUCTURE_PACKING_FOR_WIRE_USE_HEADERS #include "BeginStructPackForWire.h" diff --git a/test/raidfile/Darwin-SYS.h b/test/raidfile/Darwin-SYS.h deleted file mode 100644 index 4c4d5b16..00000000 --- a/test/raidfile/Darwin-SYS.h +++ /dev/null @@ -1,167 +0,0 @@ - -/* Taken from the Darwin Libc source -*/ - -/* - * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. - * - * @APPLE_LICENSE_HEADER_START@ - * - * The contents of this file constitute Original Code as defined in and - * are subject to the Apple Public Source License Version 1.1 (the - * "License"). You may not use this file except in compliance with the - * License. Please obtain a copy of the License at - * http://www.apple.com/publicsource and read it before using this file. - * - * This Original Code and all software distributed under the License are - * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER - * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the - * License for the specific language governing rights and limitations - * under the License. - * - * @APPLE_LICENSE_HEADER_END@ - */ -/* Copyright (c) 1992 NeXT Computer, Inc. All rights reserved. - * - * File: SYS.h - * - * Definition of the user side of the UNIX system call interface - * for M98K. - * - * Errors are flagged by the location of the trap return (ie., which - * instruction is executed upon rfi): - * - * SC PC + 4: Error (typically branch to cerror()) - * SC PC + 8: Success - * - * HISTORY - * 18-Nov-92 Ben Fathi (benf@next.com) - * Ported to m98k. - * - * 9-Jan-92 Peter King (king@next.com) - * Created. - */ - -#define KERNEL_PRIVATE 1 -/* - * Header files. - */ -#import -#import -#import -#import - -/* From rhapsody kernel mach/ppc/syscall_sw.h */ -#define kernel_trap_args_0 -#define kernel_trap_args_1 -#define kernel_trap_args_2 -#define kernel_trap_args_3 -#define kernel_trap_args_4 -#define kernel_trap_args_5 -#define kernel_trap_args_6 -#define kernel_trap_args_7 - -/* - * simple_kernel_trap -- Mach system calls with 8 or less args - * Args are passed in a0 - a7, system call number in r0. - * Do a "sc" instruction to enter kernel. - */ -#define simple_kernel_trap(trap_name, trap_number) \ - .globl _##trap_name @\ -_##trap_name: @\ - li r0,trap_number @\ - sc @\ - blr @\ - END(trap_name) - -#define kernel_trap_0(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_1(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_2(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_3(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_4(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_5(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_6(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_7(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_8(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -#define kernel_trap_9(trap_name,trap_number) \ - simple_kernel_trap(trap_name,trap_number) - -/* End of rhapsody kernel mach/ppc/syscall_sw.h */ - -/* - * Macros. - */ - -#define SYSCALL(name, nargs) \ - .globl cerror @\ -LEAF(_##name) @\ - kernel_trap_args_##nargs @\ - li r0,SYS_##name @\ - sc @\ - b 1f @\ - b 2f @\ -1: BRANCH_EXTERN(cerror) @\ -.text \ -2: nop - -#define SYSCALL_NONAME(name, nargs) \ - .globl cerror @\ - kernel_trap_args_##nargs @\ - li r0,SYS_##name @\ - sc @\ - b 1f @\ - b 2f @\ -1: BRANCH_EXTERN(cerror) @\ -.text \ -2: nop - -#define PSEUDO(pseudo, name, nargs) \ -LEAF(_##pseudo) @\ - SYSCALL_NONAME(name, nargs) - - -#undef END -#import - -#if !defined(SYS_getdirentriesattr) -#define SYS_getdirentriesattr 222 -#endif - -#if !defined(SYS_semsys) -#define SYS_semsys 251 -#define SYS_msgsys 252 -#define SYS_shmsys 253 -#define SYS_semctl 254 -#define SYS_semget 255 -#define SYS_semop 256 -#define SYS_semconfig 257 -#define SYS_msgctl 258 -#define SYS_msgget 259 -#define SYS_msgsnd 260 -#define SYS_msgrcv 261 -#define SYS_shmat 262 -#define SYS_shmctl 263 -#define SYS_shmdt 264 -#define SYS_shmget 265 -#endif - diff --git a/test/raidfile/Makefile.extra.Darwin b/test/raidfile/Makefile.extra.Darwin deleted file mode 100644 index dc3bad81..00000000 --- a/test/raidfile/Makefile.extra.Darwin +++ /dev/null @@ -1,6 +0,0 @@ - -# link-extra: intercept-lseek.o intercept-close.o intercept-open.o intercept-read.o intercept-readv.o intercept-write.o - -$(OUTDIR)/intercept-lseek.o: make-darwin-intercepts.pl $(OUTDIR) - ./make-darwin-intercepts.pl $(OUTDIR) - diff --git a/test/raidfile/make-darwin-intercepts.pl b/test/raidfile/make-darwin-intercepts.pl deleted file mode 100755 index 2f19e090..00000000 --- a/test/raidfile/make-darwin-intercepts.pl +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/perl -use strict; - -my $out = $ARGV[0]; -die "No out directory specified" unless $out ne ''; - -my @calls = split /[\r\n]+/,<<__E; -lseek SYSCALL_TEST(lseek, 3) -open SYSCALL_TEST(open, 3) -close SYSCALL_TEST(close, 1) -write SYSCALL_TEST(write, 3) -read SYSCALL_TEST(read, 3) -readv SYSCALL_TEST(readv, 3) -__E - -for(@calls) -{ - my ($name,$line) = split / /,$_,2; - - open FL,">$out/intercept-$name.s" or die "Can't open out file"; - print FL <<'__S'; -#include "../../../test/raidfile/Darwin-SYS.h" - -#define SYSCALL_TEST(name, nargs) \ - .globl cerror @\ -LEAF(_TEST_##name) @\ - kernel_trap_args_##nargs @\ - li r0,SYS_##name @\ - sc @\ - b 1f @\ - b 2f @\ -1: BRANCH_EXTERN(cerror) @\ -.text \ -2: nop - -__S - print FL $line,"\n\tblr\n\n"; - - close FL; - - if(system("gcc -c $out/intercept-$name.s -o $out/intercept-$name.o") != 0) - { - die "Assembly failed\n"; - } -} - -- cgit v1.2.3