From b6817f5eaafb3f2859731c5434e4b4c4a12a980e Mon Sep 17 00:00:00 2001 From: Frank Lahm Date: Fri, 3 Dec 2010 10:05:57 +0100 Subject: [PATCH] Fixes for Solaris --- libatalk/adouble/ad_flush.c | 5 +++-- libatalk/adouble/ad_open.c | 15 +++++++++------ libatalk/vfs/extattr.c | 8 +++++--- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/libatalk/adouble/ad_flush.c b/libatalk/adouble/ad_flush.c index e234ed7b..09c663a3 100644 --- a/libatalk/adouble/ad_flush.c +++ b/libatalk/adouble/ad_flush.c @@ -156,12 +156,13 @@ int ad_flush(struct adouble *ad) break; case AD_VERSION_EA: if (sys_fsetxattr(ad->ad_md->adf_fd, AD_EA_META, ad->ad_data, AD_DATASZ_EA, 0) != 0) { - LOG(log_error, logtype_afpd, "Unexpected adouble version"); + LOG(log_error, logtype_afpd, "ad_flush: sys_fsetxattr error: %s", + strerror(errno)); return -1; } break; default: - LOG(log_error, logtype_afpd, "Unexpected adouble version"); + LOG(log_error, logtype_afpd, "ad_flush: unexpected adouble version"); return -1; } } diff --git a/libatalk/adouble/ad_open.c b/libatalk/adouble/ad_open.c index fe248ab4..1119f1ff 100644 --- a/libatalk/adouble/ad_open.c +++ b/libatalk/adouble/ad_open.c @@ -688,19 +688,23 @@ static int ad_open_hf_ea(const char *path, int adflags, int oflags, int mode, st /* Read the adouble header in and parse it.*/ if (ad->ad_ops->ad_header_read(ad, NULL) != 0) { if (!(oflags & O_CREAT)) { - ret = 0; - goto error; + err = errno; + ad_close(ad, adflags); + errno = err; + return -1; } /* It doesnt exist, EPERM or another error */ - if (errno != ENOATTR) { - LOG(log_maxdebug, logtype_default, "ad_open_hf_ea: unexpected: %s", strerror(errno)); + if (errno != ENOATTR && errno != ENOENT) { + LOG(log_error, logtype_default, "ad_open_hf_ea: unexpected: %s", strerror(errno)); ret = -1; goto error; } /* Create one */ if (new_ad_header(path, ad, adflags) < 0) { + LOG(log_error, logtype_default, "ad_open_hf_ea: can't create new header: %s/%s", + getcwdpath(), path); ret = -1; goto error; } @@ -719,7 +723,6 @@ error: err = errno; ad_close(ad, adflags); errno = err; - LOG(log_error, logtype_default, "ad_open_hf_ea: error: %s", strerror(errno)); return ret; } @@ -749,6 +752,7 @@ static int ad_open_hf(const char *path, int adflags, int oflags, int mode, struc memset(ad->ad_eid, 0, sizeof( ad->ad_eid )); ad->ad_rlen = 0; + adf_lock_init(ad->ad_md); switch (ad->ad_flags) { case AD_VERSION2: @@ -763,7 +767,6 @@ static int ad_open_hf(const char *path, int adflags, int oflags, int mode, struc } ad->ad_md->adf_refcount = 1; - adf_lock_init(ad->ad_md); return ret; } diff --git a/libatalk/vfs/extattr.c b/libatalk/vfs/extattr.c index 7b3ea32e..ee2636b6 100644 --- a/libatalk/vfs/extattr.c +++ b/libatalk/vfs/extattr.c @@ -842,7 +842,8 @@ static int solaris_attropen(const char *path, const char *attrpath, int oflag, m { int filedes = attropen(path, attrpath, oflag, mode); if (filedes == -1) { - LOG(log_maxdebug, logtype_default, "attropen FAILED: path: %s, name: %s, errno: %s\n",path,attrpath,strerror(errno)); + LOG(log_maxdebug, logtype_default, "attropen FAILED: path: %s, name: %s, errno: %s", + path, attrpath, strerror(errno)); errno = ENOATTR; } return filedes; @@ -852,7 +853,8 @@ static int solaris_openat(int fildes, const char *path, int oflag, mode_t mode) { int filedes = openat(fildes, path, oflag, mode); if (filedes == -1) { - LOG(log_maxdebug, logtype_default, "openat FAILED: fd: %s, path: %s, errno: %s\n",filedes,path,strerror(errno)); + LOG(log_maxdebug, logtype_default, "openat FAILED: fd: %d, path: %s, errno: %s", + filedes, path, strerror(errno)); } return filedes; } @@ -862,7 +864,7 @@ static int solaris_write_xattr(int attrfd, const char *value, size_t size) if ((ftruncate(attrfd, 0) == 0) && (write(attrfd, value, size) == size)) { return 0; } else { - LOG(log_maxdebug, logtype_default, "solaris_write_xattr FAILED!\n"); + LOG(log_maxdebug, logtype_default, "solaris_write_xattr FAILED!"); return -1; } } -- 2.39.2