|
#define | AD_VERSION2 0x00020000 |
#define | AD_VERSION_EA 0x00020002 |
#define | AD_VERSION AD_VERSION_EA |
#define | ADEID_DFORK 1 |
#define | ADEID_RFORK 2 |
#define | ADEID_NAME 3 |
#define | ADEID_COMMENT 4 |
#define | ADEID_ICONBW 5 |
#define | ADEID_ICONCOL 6 |
#define | ADEID_FILEI 7 /* v1, replaced by: */ |
#define | ADEID_FILEDATESI 8 /* this */ |
#define | ADEID_FINDERI 9 |
#define | ADEID_MACFILEI 10 /* we don't use this */ |
#define | ADEID_PRODOSFILEI 11 /* we store prodos info here */ |
#define | ADEID_MSDOSFILEI 12 /* we don't use this */ |
#define | ADEID_SHORTNAME 13 |
#define | ADEID_AFPFILEI 14 /* where the rest of the FILEI info goes */ |
#define | ADEID_DID 15 |
#define | ADEID_PRIVDEV 16 |
#define | ADEID_PRIVINO 17 |
#define | ADEID_PRIVSYN 18 /* in synch with database */ |
#define | ADEID_PRIVID 19 |
#define | ADEID_MAX (ADEID_PRIVID + 1) |
#define | AD_DEV 0x80444556 |
#define | AD_INO 0x80494E4F |
#define | AD_SYN 0x8053594E |
#define | AD_ID 0x8053567E |
#define | AD_APPLESINGLE_MAGIC 0x00051600 |
#define | AD_APPLEDOUBLE_MAGIC 0x00051607 |
#define | AD_MAGIC AD_APPLEDOUBLE_MAGIC |
#define | ADEDLEN_MAGIC 4 |
#define | ADEDLEN_VERSION 4 |
#define | ADEDLEN_FILLER 16 |
#define | ADEDLEN_NENTRIES 2 |
#define | AD_HEADER_LEN (ADEDLEN_MAGIC + ADEDLEN_VERSION + ADEDLEN_FILLER + ADEDLEN_NENTRIES) /* 26 */ |
#define | AD_ENTRY_LEN 12 /* size of a single entry header */ |
#define | ADEDLEN_NAME 255 |
#define | ADEDLEN_COMMENT 200 |
#define | ADEDLEN_FILEI 16 |
#define | ADEDLEN_FINDERI 32 |
#define | ADEDLEN_FILEDATESI 16 |
#define | ADEDLEN_SHORTNAME 12 /* length up to 8.3 */ |
#define | ADEDLEN_AFPFILEI 4 |
#define | ADEDLEN_MACFILEI 4 |
#define | ADEDLEN_PRODOSFILEI 8 |
#define | ADEDLEN_MSDOSFILEI 2 |
#define | ADEDLEN_ICONBW 128 |
#define | ADEDLEN_ICONCOL 1024 |
#define | ADEDLEN_DID 4 |
#define | ADEDLEN_PRIVDEV 8 |
#define | ADEDLEN_PRIVINO 8 |
#define | ADEDLEN_PRIVSYN 8 |
#define | ADEDLEN_PRIVID 4 |
#define | ADEID_NUM_V2 13 |
#define | ADEID_NUM_EA 8 |
#define | ADEID_NUM_OSX 2 |
#define | AD_DATASZ2 |
#define | AD_DATASZ_EA |
#define | AD_DATASZ_OSX (AD_HEADER_LEN + (ADEID_NUM_OSX * AD_ENTRY_LEN) + ADEDLEN_FINDERI) |
#define | AD_DATASZ_MAX 1024 |
#define | AD_DATASZ AD_DATASZ_EA |
#define | ADEDOFF_FINDERI_OSX (AD_HEADER_LEN + ADEID_NUM_OSX*AD_ENTRY_LEN) |
#define | ADEDOFF_RFORK_OSX (ADEDOFF_FINDERI_OSX + ADEDLEN_FINDERI) |
#define | AD_SYMLINK -2 |
#define | AD_INITED 0xad494e54 /* ad"INT" */ |
#define | AD_CLOSED 0xadc10ced |
#define | ADFLAGS_DF (1<<0) |
#define | ADFLAGS_RF (1<<1) |
#define | ADFLAGS_HF (1<<2) |
#define | ADFLAGS_DIR (1<<3) |
#define | ADFLAGS_NOHF (1<<4) /* not an error if no metadata fork */ |
#define | ADFLAGS_NORF (1<<5) /* not an error if no resource fork */ |
#define | ADFLAGS_CHECK_OF (1<<6) /* check for open forks from us and other afpd's */ |
#define | ADFLAGS_SETSHRMD |
#define | ADFLAGS_RDWR (1<<8) /* open read/write */ |
#define | ADFLAGS_RDONLY (1<<9) /* open read only */ |
#define | ADFLAGS_CREATE (1<<10) /* create file, open called with O_CREAT */ |
#define | ADFLAGS_EXCL (1<<11) /* exclusive open, open called with O_EXCL */ |
#define | ADFLAGS_TRUNC (1<<12) /* truncate, open called with O_TRUNC */ |
#define | ADVOL_NODEV (1 << 0) |
#define | ADVOL_RO (1 << 1) |
#define | ADVOL_UNIXPRIV (1 << 2) /* adouble unix priv */ |
#define | ADVOL_INVDOTS (1 << 3) /* dot files (.DS_Store) are invisible) */ |
#define | ADVOL_FOLLO_SYML (1 << 4) |
#define | ADVOL_FORCE_STICKY_XATTR (1 << 5) |
#define | ADLOCK_CLR (0) |
#define | ADLOCK_RD (1<<0) |
#define | ADLOCK_WR (1<<1) |
#define | ADLOCK_MASK (ADLOCK_RD | ADLOCK_WR) |
#define | ADLOCK_UPGRADE (1<<2) |
#define | ADLOCK_FILELOCK (1<<3) |
#define | AD_FILELOCK_BASE (UINT32_C(0x7FFFFFFF) - 9) |
#define | BYTELOCK_MAX (AD_FILELOCK_BASE - 1) |
#define | AD_FILELOCK_OPEN_WR (AD_FILELOCK_BASE + 0) |
#define | AD_FILELOCK_OPEN_RD (AD_FILELOCK_BASE + 1) |
#define | AD_FILELOCK_RSRC_OPEN_WR (AD_FILELOCK_BASE + 2) |
#define | AD_FILELOCK_RSRC_OPEN_RD (AD_FILELOCK_BASE + 3) |
#define | AD_FILELOCK_DENY_WR (AD_FILELOCK_BASE + 4) |
#define | AD_FILELOCK_DENY_RD (AD_FILELOCK_BASE + 5) |
#define | AD_FILELOCK_RSRC_DENY_WR (AD_FILELOCK_BASE + 6) |
#define | AD_FILELOCK_RSRC_DENY_RD (AD_FILELOCK_BASE + 7) |
#define | AD_FILELOCK_OPEN_NONE (AD_FILELOCK_BASE + 8) |
#define | AD_FILELOCK_RSRC_OPEN_NONE (AD_FILELOCK_BASE + 9) |
#define | AD_DATE_CREATE 0 |
#define | AD_DATE_MODIFY 4 |
#define | AD_DATE_BACKUP 8 |
#define | AD_DATE_ACCESS 12 |
#define | AD_DATE_MASK |
#define | AD_DATE_UNIX (1 << 10) |
#define | AD_DATE_START htonl(0x80000000) |
#define | AD_DATE_DELTA 946684800 |
#define | AD_DATE_FROM_UNIX(x) |
#define | AD_DATE_TO_UNIX(x) |
#define | FINDERINFO_FRTYPEOFF 0 |
#define | FINDERINFO_FRCREATOFF 4 |
#define | FINDERINFO_FRFLAGOFF 8 |
#define | FINDERINFO_ISONDESK (1) /* "d", fd */ |
#define | FINDERINFO_COLOR (0x0e) |
#define | FINDERINFO_HIDEEXT (1<<4) /* "e", fd */ |
#define | FINDERINFO_ISHARED (1<<6) /* "m", f */ |
#define | FINDERINFO_HASNOINITS (1<<7) /* "n", f */ |
#define | FINDERINFO_HASBEENINITED (1<<8) /* "i", fd */ |
#define | FINDERINFO_HASCUSTOMICON (1<<10) /* "c", fd */ |
#define | FINDERINFO_ISSTATIONNERY (1<<11) /* "t", f */ |
#define | FINDERINFO_NAMELOCKED (1<<12) /* "s", fd */ |
#define | FINDERINFO_HASBUNDLE (1<<13) /* "b", fd */ |
#define | FINDERINFO_INVISIBLE (1<<14) /* "v", fd */ |
#define | FINDERINFO_ISALIAS (1<<15) /* "a", fd */ |
#define | FINDERINFO_FRVIEWOFF 14 |
#define | FINDERINFO_CUSTOMICON 0x4 |
#define | FINDERINFO_CLOSEDVIEW 0x100 |
#define | ATTRBIT_INVISIBLE (1<<0) /* opaque from FinderInfo */ |
#define | ATTRBIT_MULTIUSER (1<<1) /* file: opaque, dir: see below */ |
#define | ATTRBIT_SYSTEM (1<<2) /* "y", fd */ |
#define | ATTRBIT_DOPEN (1<<3) /* data fork already open. Not stored, computed on the fly */ |
#define | ATTRBIT_ROPEN (1<<4) /* resource fork already open. Not stored, computed on the fly */ |
#define | ATTRBIT_NOWRITE (1<<5) /* "w", f, write inhibit(v2)/read-only(v1) bit */ |
#define | ATTRBIT_BACKUP (1<<6) /* "p", fd */ |
#define | ATTRBIT_NORENAME (1<<7) /* "r", fd */ |
#define | ATTRBIT_NODELETE (1<<8) /* "l", fd */ |
#define | ATTRBIT_NOCOPY (1<<10) /* "o", f */ |
#define | ATTRBIT_SETCLR (1<<15) /* set/clear bit (d) */ |
#define | ATTRBIT_EXPFLDR (1<<1) /* Folder is a sharepoint */ |
#define | ATTRBIT_MOUNTED (1<<3) /* Directory is mounted by a user */ |
#define | ATTRBIT_SHARED (1<<4) /* Shared area, called IsExpFolder in spec */ |
#define | AD_AFPFILEI_OWNER (1 << 0) /* any owner */ |
#define | AD_AFPFILEI_GROUP (1 << 1) /* ignore group */ |
#define | AD_AFPFILEI_BLANKACCESS (1 << 2) /* blank access permissions */ |
#define | AD_FILLER_NETATALK "Netatalk " |
#define | AD_FILLER_OSX "Mac OS X" |
#define | ad_data_fileno(ad) |
#define | ad_reso_fileno(ad) |
#define | ad_meta_fileno(ad) |
#define | AD_DATA_OPEN(ad) |
#define | AD_META_OPEN(ad) |
#define | AD_RSRC_OPEN(ad) |
#define | ad_getversion(ad) |
#define | ad_getentrylen(ad, eid) |
#define | ad_setentrylen(ad, eid, len) |
#define | ad_setentryoff(ad, eid, off) |
#define | ad_get_RF_flags(ad) |
#define | ad_get_MD_flags(ad) |
#define | ad_ref(ad) |
#define | ad_unref(ad) |
#define | ad_get_syml_opt(ad) |
#define | ad_munmap(buf, len) |
|
int | ad_rebuild_adouble_header_v2 (struct adouble *) |
int | ad_rebuild_adouble_header_ea (struct adouble *) |
int | ad_rebuild_adouble_header_osx (struct adouble *ad, char *adbuf) |
int | ad_copy_header (struct adouble *, struct adouble *) |
int | ad_flush (struct adouble *) |
int | ad_close (struct adouble *, int) |
int | fsetrsrcea (struct adouble *ad, int fd, const char *eaname, const void *value, size_t size, int flags) |
int | ad_testlock (struct adouble *adp, int eid, off_t off) |
uint16_t | ad_openforks (struct adouble *adp, uint16_t) |
int | ad_lock (struct adouble *, uint32_t eid, int type, off_t off, off_t len, int fork) |
void | ad_unlock (struct adouble *, int fork, int unlckbrl) |
int | ad_tmplock (struct adouble *, uint32_t eid, int type, off_t off, off_t len, int fork) |
void * | ad_entry (const struct adouble *ad, int eid) |
off_t | ad_getentryoff (const struct adouble *ad, int eid) |
const char * | adflags2logstr (int adflags) |
int | ad_setfuid (const uid_t) |
uid_t | ad_getfuid (void) |
char * | ad_dir (const char *) |
const char * | ad_path (const char *, int) |
const char * | ad_path_ea (const char *, int) |
const char * | ad_path_osx (const char *path, int adflags) |
int | ad_mode (const char *, mode_t) |
int | ad_mkdir (const char *, mode_t) |
void | ad_init (struct adouble *, const struct vol *restrict) |
void | ad_init_old (struct adouble *ad, int flags, int options) |
int | ad_init_offsets (struct adouble *ad) |
int | ad_open (struct adouble *ad, const char *path, int adflags,...) |
int | ad_openat (struct adouble *, int dirfd, const char *path, int adflags,...) |
int | ad_refresh (const char *path, struct adouble *) |
int | ad_stat (const char *, struct stat *) |
int | ad_metadata (const char *, int, struct adouble *) |
| open metadata, possibly as root
|
int | ad_metadataat (int, const char *, int, struct adouble *) |
mode_t | ad_hf_mode (mode_t mode) |
int | ad_valid_header_osx (const char *path) |
off_t | ad_reso_size (const char *path, int adflags, struct adouble *ad) |
int | ad_convert (const char *path, const struct stat *sp, const struct vol *vol, const char **newpath) |
int | sys_ftruncate (int fd, off_t length) |
ssize_t | ad_read (struct adouble *, uint32_t, off_t, char *, size_t) |
ssize_t | ad_pread (struct ad_fd *, void *, size_t, off_t) |
ssize_t | ad_write (struct adouble *, uint32_t, off_t, int, const char *, size_t) |
ssize_t | adf_pread (struct ad_fd *, void *, size_t, off_t) |
ssize_t | adf_pwrite (struct ad_fd *, const void *, size_t, off_t) |
int | ad_dtruncate (struct adouble *, off_t) |
int | ad_rtruncate (struct adouble *, const char *, off_t) |
int | copy_fork (int eid, struct adouble *add, struct adouble *ads, uint8_t *buf, size_t buflen) |
off_t | ad_size (const struct adouble *, uint32_t) |
void * | ad_mmapread (struct adouble *, uint32_t, off_t, size_t) |
void * | ad_mmapwrite (struct adouble *, uint32_t, off_t, int, size_t) |
int | ad_setdate (struct adouble *, unsigned int, uint32_t) |
int | ad_getdate (const struct adouble *, unsigned int, uint32_t *) |
int | ad_setattr (const struct adouble *, const uint16_t) |
int | ad_getattr (const struct adouble *, uint16_t *) |
int | ad_setname (struct adouble *, const char *) |
int | ad_setid (struct adouble *, dev_t dev, ino_t ino, uint32_t, uint32_t, const void *) |
uint32_t | ad_getid (struct adouble *, dev_t, ino_t, cnid_t, const void *) |
uint32_t | ad_forcegetid (struct adouble *adp) |
Part of Netatalk's AppleDouble implementatation.
int ad_open |
( |
struct adouble * | ad, |
|
|
const char * | path, |
|
|
int | adflags, |
|
|
| ... ) |
|
extern |
Open data-, metadata(header)- or resource fork
ad_open(struct adouble *ad, const char *path, int adflags, int flags) ad_open(struct adouble *ad, const char *path, int adflags, int flags, mode_t mode)
You must call ad_init() before ad_open, usually you'll just call it like this:
struct adoube ad;
void ad_init(struct adouble *, const struct vol *restrict)
Definition include/atalk/volume.h:32
int v_ad_options
Definition include/atalk/volume.h:53
int v_adouble
Definition include/atalk/volume.h:51
Open a files data fork, metadata fork or resource fork.
- Parameters
-
ad | (rw) pointer to struct adouble |
path | (r) Path to file or directory |
adflags | (r) Flags specifying which fork to open, can be or'd: ADFLAGS_DF: open data fork ADFLAGS_RF: open resource fork ADFLAGS_HF: open header (metadata) file ADFLAGS_NOHF: it's not an error if header file couldn't be opened ADFLAGS_NORF: it's not an error if reso fork couldn't be opened ADFLAGS_DIR: if path is a directory you MUST or ADFLAGS_DIR to adflags |
Access mode for the forks: ADFLAGS_RDONLY: open read only ADFLAGS_RDWR: open read write
Creation flags: ADFLAGS_CREATE: create if not existing ADFLAGS_TRUNC: truncate
Special flags: ADFLAGS_CHECK_OF: check for open forks from us and other afpd's ADFLAGS_SETSHRMD: this adouble struct will be used to set sharemode locks. This basically results in the files being opened RW instead of RDONLY.
- Parameters
-
... | (r) mode used with O_CREATE |
The open mode flags (rw vs ro) have to take into account all the following requirements:
- we remember open fds for files because me must avoid a single close releasing fcntl locks for other fds of the same file
BUGS:
- on Solaris (HAVE_EAFD) ADFLAGS_RF doesn't work without ADFLAGS_HF, because it checks whether ad_meta_fileno() is already openend. As a workaround pass ADFLAGS_SETSHRMD.
- Returns
- 0 on success, any other value indicates an error