int fd = (eid == ADEID_DFORK) ? ad_data_fileno(adp) : ad_reso_fileno(adp);
- if (fd != -1 && fd != -2 && fcntl(fd, F_SHARE, &shmd) != 0) {
+ if (fd != -1 && fd != AD_SYMLINK && fcntl(fd, F_SHARE, &shmd) != 0) {
LOG(log_debug, logtype_afpd, "fork_setmode: fcntl: %s", strerror(errno));
errno = EACCES;
return -1;
#define ADEDOFF_FINDERI_OSX (AD_HEADER_LEN + ADEID_NUM_OSX*AD_ENTRY_LEN)
#define ADEDOFF_RFORK_OSX (ADEDOFF_FINDERI_OSX + ADEDLEN_FINDERI)
+/* special fd value used to indicate an open fork file is a (not open) symlink */
+#define AD_SYMLINK -2
+
typedef uint32_t cnid_t;
struct ad_entry {
} adf_lock_t;
struct ad_fd {
- int adf_fd; /* -1: invalid, -2: symlink */
+ int adf_fd; /* -1: invalid, AD_SYMLINK: symlink */
char *adf_syml;
int adf_flags;
adf_lock_t *adf_lock;
#define ad_reso_fileno(ad) ((ad)->ad_rfp->adf_fd)
#define ad_meta_fileno(ad) ((ad)->ad_mdp->adf_fd)
-/* -1 means not open, -2 is a symlink */
+/* -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)
{
int ret = 0;
- if (ad_data_fileno(ad) == -2) {
+ if (ad_data_fileno(ad) == AD_SYMLINK) {
free(ad->ad_data_fork.adf_syml);
ad->ad_data_fork.adf_syml = NULL;
} else {
adflags |= ADFLAGS_HF;
if ((adflags & ADFLAGS_DF)
- && (ad_data_fileno(ad) >= 0 || ad_data_fileno(ad) == -2) /* -2 means symlink */
+ && (ad_data_fileno(ad) >= 0 || ad_data_fileno(ad) == AD_SYMLINK)
&& --ad->ad_data_fork.adf_refcount == 0) {
if (ad_data_closefd(ad) < 0)
err = -1;
shmdstrfromoff(lock->l_start),
(intmax_t)lock->l_len);
- if (fd == -2) {
- /* We assign fd = -2 for symlinks -> do nothing */
+ if (fd == AD_SYMLINK) {
if (cmd == F_GETLK)
lock->l_type = F_UNLCK;
return 0;
EC_FAIL;
}
ad->ad_data_fork.adf_syml[lsz] = 0;
- ad->ad_data_fork.adf_fd = -2; /* -2 means its a symlink */
+ ad->ad_data_fork.adf_fd = AD_SYMLINK;
break;
default:
EC_FAIL;
oflags = O_NOFOLLOW | (ad2openflags(ad, ADFLAGS_DF, adflags) & ~(O_CREAT | O_TRUNC));
- if (ad_meta_fileno(ad) == -2)
+ if (ad_meta_fileno(ad) == AD_SYMLINK)
/* symlink */
EC_EXIT;
size_t roundup;
off_t r_off;
- if (ad_data_fileno(ad) == -2) {
- /* It's a symlink */
+ if (ad_data_fileno(ad) == AD_SYMLINK) {
errno = EACCES;
return -1;
}