Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 8 Nov 2009 11:57:21 +0100 (CET)
From:      Ulrich Spoerlein <uqs@spoerlein.net>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   bin/140384: chio(8) fix some harmless uninitialized argument warnings
Message-ID:  <200911081057.nA8AvLYb024254@coyote.spoerlein.net>
Resent-Message-ID: <200911081100.nA8B07OV093016@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         140384
>Category:       bin
>Synopsis:       chio(8) fix some harmless uninitialized argument warnings
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Nov 08 11:00:07 UTC 2009
>Closed-Date:
>Last-Modified:
>Originator:     Ulrich Spoerlein
>Release:        FreeBSD 7.2-STABLE i386
>Organization:
>Environment:
	
>Description:
These were found by Clang/Static Analyzer

- Removed three dead increments
- More importantly, removes an uninitialized value read. While the zeroing
  of struct cesr upfront is enough and matches other parts of the code, I also
  removed the writing of a zero value into the struct, as it is unneeded. If
  this is deemed a superfluous optimization, just leave those assignments in.

see also:
https://www.spoerlein.net/scan-build/2009-11-07-1/report-wzs4FL.html#EndPath
https://www.spoerlein.net/scan-build/2009-11-07-1/report-apJ1ME.html#EndPath
https://www.spoerlein.net/scan-build/2009-11-07-1/report-Driys4.html#EndPath
https://www.spoerlein.net/scan-build/2009-11-07-1/report-4kHXS5.html#EndPath

>How-To-Repeat:
	
>Fix:
diff -r 4e4d5ca6b8da -r fdda05e4e407 bin/chio/chio.c
--- a/bin/chio/chio.c	Mon Nov 02 18:57:34 2009 +0100
+++ b/bin/chio/chio.c	Sun Nov 08 09:58:32 2009 +0100
@@ -424,16 +424,13 @@
 
 /* ARGSUSED */
 static int
-do_params(const char *cname, int argc, char **argv)
+do_params(const char *cname, int argc, char **argv __unused)
 {
 	struct changer_params data;
 	int picker;
 
 	/* No arguments to this command. */
-
-	++argv; --argc;
-
-	if (argc) {
+	if (argc > 1) {
 		warnx("%s: no arguments expected", cname);
 		goto usage;
 	}
@@ -467,15 +464,12 @@
 
 /* ARGSUSED */
 static int
-do_getpicker(const char *cname, int argc, char **argv)
+do_getpicker(const char *cname, int argc, char **argv __unused)
 {
 	int picker;
 
 	/* No arguments to this command. */
-
-	++argv; --argc;
-
-	if (argc) {
+	if (argc > 1) {
 		warnx("%s: no arguments expected", cname);
 		goto usage;
 	}
@@ -966,7 +960,6 @@
 	} else {
 		element = parse_element_unit(*argv);
 	}
-	++argv; --argc;
 
 	/* Get the status */
 	ces = get_element_status((unsigned int)type, (unsigned int)element,
@@ -1072,10 +1065,10 @@
 
 	/* Read in the changer slots */
 	if (cp.cp_nslots > 0) {
+		(void) memset(&cesr, 0, sizeof(cesr));
 		cesr.cesr_element_type = CHET_ST;
-		cesr.cesr_element_base = 0;
 		cesr.cesr_element_count = cp.cp_nslots;
-		cesr.cesr_flags |= CESR_VOLTAGS;
+		cesr.cesr_flags = CESR_VOLTAGS;
 		cesr.cesr_element_status = ces;
 
 		if (ioctl(changer_fd, CHIOGSTATUS, (char *)&cesr) == -1) {
@@ -1087,12 +1080,10 @@
 
 	/* Read in the drive information */
 	if (cp.cp_ndrives > 0 ) {
-
 		(void) memset(&cesr, 0, sizeof(cesr));
 		cesr.cesr_element_type = CHET_DT;
-		cesr.cesr_element_base = 0;
 		cesr.cesr_element_count = cp.cp_ndrives;
-		cesr.cesr_flags |= CESR_VOLTAGS;
+		cesr.cesr_flags = CESR_VOLTAGS;
 		cesr.cesr_element_status = ces;
 
 		if (ioctl(changer_fd, CHIOGSTATUS, (char *)&cesr) == -1) {
@@ -1106,9 +1097,8 @@
 	if (cp.cp_nportals > 0 ) {
 		(void) memset(&cesr, 0, sizeof(cesr));
 		cesr.cesr_element_type = CHET_IE;
-		cesr.cesr_element_base = 0;
 		cesr.cesr_element_count = cp.cp_nportals;
-		cesr.cesr_flags |= CESR_VOLTAGS;
+		cesr.cesr_flags = CESR_VOLTAGS;
 		cesr.cesr_element_status = ces;
 
 		if (ioctl(changer_fd, CHIOGSTATUS, (char *)&cesr) == -1) {
@@ -1122,9 +1112,8 @@
 	if (cp.cp_npickers > 0) {
 		(void) memset(&cesr, 0, sizeof(cesr));
 		cesr.cesr_element_type = CHET_MT;
-		cesr.cesr_element_base = 0;
 		cesr.cesr_element_count = cp.cp_npickers;
-		cesr.cesr_flags |= CESR_VOLTAGS;
+		cesr.cesr_flags = CESR_VOLTAGS;
 		cesr.cesr_element_status = ces;
 
 		if (ioctl(changer_fd, CHIOGSTATUS, (char *)&cesr) == -1) {
--- chio.diff ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911081057.nA8AvLYb024254>