--- a/usr/src/cmd/ls/ls.c Thu Jan 24 13:28:55 2008 -0800
+++ b/usr/src/cmd/ls/ls.c Thu Jan 24 14:02:00 2008 -0800
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -1981,14 +1981,9 @@
char *name;
int i;
- if ((error = nvlist_alloc(&response, NV_UNIQUE_NAME, 0)) != 0) {
- perror("ls:nvlist_alloc");
- return (error);
- }
if ((error = getattrat(AT_FDCWD, XATTR_VIEW_READWRITE, fname,
&response)) != 0) {
perror("ls:getattrat");
- nvlist_free(response);
return (error);
}
--- a/usr/src/lib/libc/port/gen/attrat.c Thu Jan 24 13:28:55 2008 -0800
+++ b/usr/src/lib/libc/port/gen/attrat.c Thu Jan 24 14:02:00 2008 -0800
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -75,7 +75,7 @@
if (libnvhandle)
dlclose(libnvhandle);
lmutex_unlock(&attrlock);
- return (EINVAL);
+ return (-1);
}
initialized = 1;
@@ -91,14 +91,17 @@
char *packbuf = NULL;
if (nvsize(request, &bufsize, NV_ENCODE_XDR) != 0) {
- return (EINVAL);
+ errno = EINVAL;
+ return (-1);
}
packbuf = malloc(bufsize);
if (packbuf == NULL)
- return (EINVAL);
+ return (-1);
if (nvpacker(request, &packbuf, &bufsize, NV_ENCODE_XDR, 0) != 0) {
free(packbuf);
+ errno = EINVAL;
+ return (-1);
} else {
*nv_request = (void *)packbuf;
*nv_requestlen = bufsize;
@@ -129,7 +132,7 @@
oflag = mode & O_RDWR;
break;
default:
- (void) __set_errno(EINVAL);
+ errno = EINVAL;
return (-1);
}
if (mode & O_XATTR)
@@ -154,20 +157,28 @@
struct stat buf;
if (error = attrat_init())
- return (__set_errno(error));
+ return (error);
if ((error = fstat(fd, &buf)) != 0)
- return (__set_errno(error));
+ return (error);
nv_responselen = buf.st_size;
if ((nv_response = malloc(nv_responselen)) == NULL)
- return (__set_errno(ENOMEM));
+ return (-1);
bytesread = read(fd, nv_response, nv_responselen);
- if (bytesread != nv_responselen)
- return (__set_errno(EFAULT));
+ if (bytesread != nv_responselen) {
+ free(nv_response);
+ errno = EFAULT;
+ return (-1);
+ }
- error = nvunpacker(nv_response, nv_responselen, response);
+ if (nvunpacker(nv_response, nv_responselen, response)) {
+ free(nv_response);
+ errno = ENOMEM;
+ return (-1);
+ }
+
free(nv_response);
- return (error);
+ return (0);
}
static int
@@ -179,18 +190,17 @@
size_t nv_requestlen;
if (error = attrat_init())
- return (__set_errno(error));
+ return (error);
if ((error = attr_nv_pack(request, &nv_request, &nv_requestlen)) != 0)
- return (__set_errno(error));
+ return (error);
- (void) __set_errno(0);
byteswritten = write(fd, nv_request, nv_requestlen);
if (byteswritten != nv_requestlen) {
saveerrno = errno;
free(nv_request);
errno = saveerrno;
- return (__set_errno(errno));
+ return (-1);
}
free(nv_request);
--- a/usr/src/lib/libcmdutils/common/process_xattrs.c Thu Jan 24 13:28:55 2008 -0800
+++ b/usr/src/lib/libcmdutils/common/process_xattrs.c Thu Jan 24 14:02:00 2008 -0800
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -280,17 +280,10 @@
f_attr_t fattr;
char *name;
- if (nvlist_alloc(&response, NV_UNIQUE_NAME, 0) != 0) {
- (void) fprintf(stderr, dgettext(TEXT_DOMAIN,
- "%s: %s: nvlist_alloc failed\n"),
- cmd, fname);
- return (NULL);
- }
if (fgetattr(fd, XATTR_VIEW_READWRITE, &response) != 0) {
(void) fprintf(stderr, dgettext(TEXT_DOMAIN,
"%s: %s: fgetattr failed\n"),
cmd, fname);
- nvlist_free(response);
return (NULL);
}
pair = NULL;
--- a/usr/src/lib/libcmdutils/common/sysattrs.c Thu Jan 24 13:28:55 2008 -0800
+++ b/usr/src/lib/libcmdutils/common/sysattrs.c Thu Jan 24 14:02:00 2008 -0800
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -48,18 +48,15 @@
int
sysattr_status(char *file, xattr_view_t view)
{
- nvlist_t *response;
+ nvlist_t *response = NULL;
int saveerrno;
int status;
- if (nvlist_alloc(&response, NV_UNIQUE_NAME, 0) != 0) {
- return (0);
- }
-
status = getattrat(AT_FDCWD, view, file, &response);
saveerrno = errno;
- (void) nvlist_free(response);
+ if (response)
+ (void) nvlist_free(response);
errno = saveerrno;
return (status == 0);