X-Git-Url: https://arthur.barton.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=include%2Fatalk%2Fadouble.h;h=de0598b5a9f2b279eedb71dd01cc24700d20a495;hb=5ec122952ff5835479f7441291dc8fdbb7796de1;hp=a551d162585bf7074e399f740987ef4ddc1e4087;hpb=321a0107c48da7b3fbf895a2b32244174c1ff39c;p=netatalk.git diff --git a/include/atalk/adouble.h b/include/atalk/adouble.h index a551d162..de0598b5 100644 --- a/include/atalk/adouble.h +++ b/include/atalk/adouble.h @@ -49,7 +49,6 @@ /* version info */ #define AD_VERSION2 0x00020000 -#define AD_VERSION2_OSX 0x00020001 #define AD_VERSION_EA 0x00020002 /* default */ @@ -201,9 +200,6 @@ struct adouble { struct ad_fd ad_data_fork; /* the data fork */ - struct ad_fd ad_metadata_fork; /* adouble:v2 -> unused * - * adouble:ea -> fd unused, only flags used */ - struct ad_fd ad_resource_fork; /* adouble:v2 -> the adouble file * * adouble:ea -> the EA fd */ @@ -211,13 +207,16 @@ struct adouble { * adouble:ea -> ad_resource_fork */ struct ad_fd *ad_mdp; /* adouble:v2 -> ad_resource_fork * - * adouble:ea -> ad_metadata_fork */ + * adouble:ea -> ad_data_fork */ int ad_vers; /* Our adouble version info (AD_VERSION*) */ int ad_adflags; /* ad_open flags adflags like ADFLAGS_DIR */ uint32_t ad_inited; int ad_options; int ad_refcount; /* multiple forks may open one adouble */ + int ad_data_refcount; + int ad_meta_refcount; + int ad_reso_refcount; off_t ad_rlen; /* ressource fork len with AFP 3.0 * * the header parameter size is too small. */ char *ad_name; /* name in server encoding (usually UTF8) */ @@ -246,8 +245,10 @@ struct adouble { #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) /* lock flags */ #define ADLOCK_CLR (0) @@ -352,9 +353,9 @@ struct adouble { #define ad_meta_fileno(ad) ((ad)->ad_mdp->adf_fd) /* -1: not open, AD_SYMLINK (-2): it's a symlink */ -#define AD_DATA_OPEN(ad) ((ad)->ad_data_fork.adf_fd >= 0) -#define AD_META_OPEN(ad) ((ad)->ad_mdp->adf_fd >= 0) -#define AD_RSRC_OPEN(ad) ((ad)->ad_rfp->adf_fd >= 0) +#define AD_DATA_OPEN(ad) (((ad)->ad_data_refcount) && (ad_data_fileno(ad) >= 0)) +#define AD_META_OPEN(ad) (((ad)->ad_meta_refcount) && (ad_meta_fileno(ad) >= 0)) +#define AD_RSRC_OPEN(ad) (((ad)->ad_reso_refcount) && (ad_reso_fileno(ad) >= 0)) #define ad_getversion(ad) ((ad)->ad_version) @@ -370,6 +371,8 @@ struct adouble { #define ad_ref(ad) (ad)->ad_refcount++ #define ad_unref(ad) --((ad)->ad_refcount) +#define ad_get_syml_opt(ad) (((ad)->ad_options & ADVOL_FOLLO_SYML) ? 0 : O_NOFOLLOW) + /* ad_flush.c */ extern int ad_rebuild_adouble_header_v2(struct adouble *); extern int ad_rebuild_adouble_header_ea(struct adouble *); @@ -407,6 +410,7 @@ extern int ad_metadata (const char *, int, struct adouble *); extern int ad_metadataat (int, const char *, int, struct adouble *); extern mode_t ad_hf_mode(mode_t mode); extern int ad_valid_header_osx(const char *path); +extern off_t ad_reso_size(const char *path, int adflags, struct adouble *ad); /* ad_conv.c */ extern int ad_convert(const char *path, const struct stat *sp, const struct vol *vol, const char **newpath);