]>
git.saurik.com Git - apple/libc.git/blob - darwin/copyfile.h
   2  * Copyright (c) 2004 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * This file contains Original Code and/or Modifications of Original Code 
   7  * as defined in and that are subject to the Apple Public Source License 
   8  * Version 2.0 (the 'License'). You may not use this file except in 
   9  * compliance with the License. Please obtain a copy of the License at 
  10  * http://www.opensource.apple.com/apsl/ and read it before using this 
  13  * The Original Code and all software distributed under the License are 
  14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  18  * Please see the License for the specific language governing rights and 
  19  * limitations under the License. 
  21  * @APPLE_LICENSE_HEADER_END@ 
  23 #ifndef _COPYFILE_H_ /* version 0.1 */ 
  27  * this is a proposed API to add to libSystem to faciliatate copying 
  28  * of files and their associated metadata.  There are several open 
  29  * source projects that need modifications to support preserving 
  30  * extended attributes and acls and this API collapses several hundred 
  31  * lines of modifications into one or two calls. 
  33  * This implementation is incomplete and the interface may change in a  
  39 struct _copyfile_state
; 
  40 typedef struct _copyfile_state 
* copyfile_state_t
; 
  41 typedef uint32_t copyfile_flags_t
; 
  46  *   from       path to source file system object 
  47  *   to         path to destination file system object 
  48  *   state      opaque blob for future extensibility 
  49  *              Must be NULL in current implementation 
  50  *   flags      (described below) 
  52  *   int        negative for error 
  55 int copyfile(const char *from
, const char *to
, copyfile_state_t state
, copyfile_flags_t flags
); 
  56 int copyfile_free(copyfile_state_t
); 
  57 copyfile_state_t 
copyfile_init(void); 
  59 /* Flag for clients to disable their use of copyfile() */ 
  60 #define COPYFILE_DISABLE_VAR    "COPY_EXTENDED_ATTRIBUTES_DISABLE" 
  62 /* flags for copyfile */ 
  64 #define COPYFILE_ACL        (1<<0) 
  65 #define COPYFILE_STAT       (1<<1) 
  66 #define COPYFILE_XATTR      (1<<2) 
  67 #define COPYFILE_DATA       (1<<3) 
  69 #define COPYFILE_SECURITY   (COPYFILE_STAT | COPYFILE_ACL) 
  70 #define COPYFILE_METADATA   (COPYFILE_SECURITY | COPYFILE_XATTR) 
  71 #define COPYFILE_ALL        (COPYFILE_METADATA | COPYFILE_DATA) 
  73 #define COPYFILE_CHECK          (1<<16) /* return flags for xattr or acls if set */ 
  74 #define COPYFILE_EXCL           (1<<17) /* fail if destination exists */ 
  75 #define COPYFILE_NOFOLLOW_SRC   (1<<18) /* don't follow if source is a symlink */ 
  76 #define COPYFILE_NOFOLLOW_DST   (1<<19) /* don't follow if dst is a symlink */ 
  77 #define COPYFILE_MOVE           (1<<20) /* unlink src after copy */ 
  78 #define COPYFILE_UNLINK         (1<<21) /* unlink dst before copy */ 
  79 #define COPYFILE_NOFOLLOW       (COPYFILE_NOFOLLOW_SRC | COPYFILE_NOFOLLOW_DST) 
  81 #define COPYFILE_PACK           (1<<22) 
  82 #define COPYFILE_UNPACK         (1<<23) 
  84 #define COPYFILE_VERBOSE        (1<<30) 
  86 #endif /* _COPYFILE_H_ */