6653731 getattrat() needs a little cleanup
authormarks
Thu, 24 Jan 2008 14:02:00 -0800
changeset 5902 0a35a89d8450
parent 5901 75aac4833ddd
child 5903 df6aed881b11
6653731 getattrat() needs a little cleanup
usr/src/cmd/ls/ls.c
usr/src/lib/libc/port/gen/attrat.c
usr/src/lib/libcmdutils/common/process_xattrs.c
usr/src/lib/libcmdutils/common/sysattrs.c
--- 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);