From nobody  Tue Feb 10 21:05:28 1998
Received: (from nobody@localhost)
          by hub.freebsd.org (8.8.8/8.8.8) id VAA19832;
          Tue, 10 Feb 1998 21:05:28 -0800 (PST)
          (envelope-from nobody)
Message-Id: <199802110505.VAA19832@hub.freebsd.org>
Date: Tue, 10 Feb 1998 21:05:28 -0800 (PST)
From: jason_smethers@bigfoot.com
To: freebsd-gnats-submit@freebsd.org
Subject: /bin/chio code cleaup and option added
X-Send-Pr-Version: www-1.0

>Number:         5712
>Category:       bin
>Synopsis:       /bin/chio code cleaup and option added
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          suspended
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Feb 10 21:10:10 PST 1998
>Closed-Date:    
>Last-Modified:  Sat Apr 19 17:36:08 UTC 2008
>Originator:     Jason Smethers
>Release:        3.0-Current
>Organization:
>Environment:
FreeBSD p90unix.vipersystems.com 3.0-CURRENT FreeBSD 3.0-CURRENT #1: Sun Feb  8 17:26:35 CST 1998     root@p90unix.vipersystems.com:/usr/src/sys/compile/P90UNIX  i386
>Description:
Gerneral code cleanup and IELEM option added for which system header file chio.h was modified. Updated man page.
>How-To-Repeat:

>Fix:
diff -c -r /usr/src/bin/chio/chio.1 /usr/local/src/bin/chio/chio.1
*** /usr/src/bin/chio/chio.1	Sat Sep 13 11:01:18 1997
--- /usr/local/src/bin/chio/chio.1	Sun Feb  8 21:16:55 1998
***************
*** 12,18 ****
  .\"    notice, this list of conditions and the following disclaimer in the
  .\"    documentation and/or other materials provided with the distribution.
  .\" 3. All advertising materials mentioning features or use of this software
! .\"    must display the following acknowledgements:
  .\"	This product includes software developed by Jason R. Thorpe
  .\"	for And Communications, http://www.and.com/
  .\" 4. The name of the author may not be used to endorse or promote products
--- 12,18 ----
  .\"    notice, this list of conditions and the following disclaimer in the
  .\"    documentation and/or other materials provided with the distribution.
  .\" 3. All advertising materials mentioning features or use of this software
! .\"    must display the following acknowledgments:
  .\"	This product includes software developed by Jason R. Thorpe
  .\"	for And Communications, http://www.and.com/
  .\" 4. The name of the author may not be used to endorse or promote products
***************
*** 177,183 ****
  .It Nm ACCESS
  Media in this element is accessible by a picker.
  .It Nm EXENAB
! Element supports passing media (exporting) to an outsite human operator.
  .It Nm INENAB
  Element supports receiving media (importing) from an outside human operator.
  .El
--- 177,185 ----
  .It Nm ACCESS
  Media in this element is accessible by a picker.
  .It Nm EXENAB
! Element supports passing media (exporting) to an outside human operator.
! .It Nm IELEM
! Perform an \fBINITIALIZE ELEMENT STATUS\fR operation on the changer.
  .It Nm INENAB
  Element supports receiving media (importing) from an outside human operator.
  .El
***************
*** 188,200 ****
  Moves the media in slot 3 (fourth slot) to drive 0 (first drive).
  .Pp
  .Nm chio setpicker 2
  Configures the changer to use picker 2 (third picker) for operations.
  .Pp
  .Sh FILES
  /dev/ch0 - default changer device
  .Sh SEE ALSO
  .Xr mt 1 ,
! .Xr ch 4 ,
  .Xr mount 8 .
  .Sh AUTHOR
  The
--- 190,203 ----
  Moves the media in slot 3 (fourth slot) to drive 0 (first drive).
  .Pp
  .Nm chio setpicker 2
+ .Pp
  Configures the changer to use picker 2 (third picker) for operations.
  .Pp
  .Sh FILES
  /dev/ch0 - default changer device
  .Sh SEE ALSO
  .Xr mt 1 ,
! .Xr ch 4
  .Xr mount 8 .
  .Sh AUTHOR
  The
diff -c -r /usr/src/bin/chio/chio.c /usr/local/src/bin/chio/chio.c
*** /usr/src/bin/chio/chio.c	Fri Jun  6 01:32:09 1997
--- /usr/local/src/bin/chio/chio.c	Sun Feb  8 19:08:22 1998
***************
*** 13,19 ****
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
!  *    must display the following acknowledgements:
   *	This product includes software developed by Jason R. Thorpe
   *	for And Communications, http://www.and.com/
   * 4. The name of the author may not be used to endorse or promote products
--- 13,19 ----
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
!  *    must display the following acknowledgments:
   *	This product includes software developed by Jason R. Thorpe
   *	for And Communications, http://www.and.com/
   * 4. The name of the author may not be used to endorse or promote products
***************
*** 34,40 ****
  
  #include <sys/param.h>
  #include <sys/ioctl.h>
! #include <sys/chio.h> 
  #include <err.h>
  #include <errno.h>
  #include <fcntl.h>
--- 34,40 ----
  
  #include <sys/param.h>
  #include <sys/ioctl.h>
! #include <sys/chio.h>
  #include <err.h>
  #include <errno.h>
  #include <fcntl.h>
***************
*** 47,52 ****
--- 47,53 ----
  #include "defs.h"
  #include "pathnames.h"
  
+ int	main __P((int, char *[]));
  static	void usage __P((void));
  static	void cleanup __P((void));
  static	int parse_element_type __P((char *));
***************
*** 62,67 ****
--- 63,69 ----
  static	int do_getpicker __P((char *, int, char **));
  static	int do_setpicker __P((char *, int, char **));
  static	int do_status __P((char *, int, char **));
+ static	int do_ielem __P((char *, int, char **));
  
  /* Valid changer element types. */
  const struct element_type elements[] = {
***************
*** 81,86 ****
--- 83,89 ----
  	{ "getpicker",		do_getpicker },
  	{ "setpicker",		do_setpicker },
  	{ "status",		do_status },
+ 	{ "ielem", 		do_ielem },
  	{ NULL,			0 },
  };
  
***************
*** 98,104 ****
  int
  main(argc, argv)
  	int argc;
! 	char **argv;
  {
  	int ch, i;
  
--- 101,107 ----
  int
  main(argc, argv)
  	int argc;
! 	char *argv[];
  {
  	int ch, i;
  
***************
*** 135,146 ****
--- 138,157 ----
  	for (i = 0; commands[i].cc_name != NULL; ++i)
  		if (strcmp(*argv, commands[i].cc_name) == 0)
  			break;
+ 	if (commands[i].cc_name == NULL) {
+ 		/* look for abbreviation */
+ 		for (i = 0; commands[i].cc_name != NULL; ++i)
+ 			if (strncmp(*argv, commands[i].cc_name,
+ 				strlen(*argv)) == 0)
+ 					break;
+ 	}
  	if (commands[i].cc_name == NULL)
  		errx(1, "unknown command: %s", *argv);
  
  	/* Skip over the command name and call handler. */
  	++argv; --argc;
  	exit ((*commands[i].cc_handler)(commands[i].cc_name, argc, argv));
+ 	/* NOTREACHED */
  }
  
  static int
***************
*** 166,172 ****
  		warnx("%s: too many arguments", cname);
  		goto usage;
  	}
! 	bzero(&cmd, sizeof(cmd));
  
  	/* <from ET>  */
  	cmd.cm_fromtype = parse_element_type(*argv);
--- 177,183 ----
  		warnx("%s: too many arguments", cname);
  		goto usage;
  	}
! 	(void) memset(&cmd, 0, sizeof(cmd));
  
  	/* <from ET>  */
  	cmd.cm_fromtype = parse_element_type(*argv);
***************
*** 206,212 ****
  	return (0);
  
   usage:
! 	fprintf(stderr, "usage: chio %s "
  	    "<from ET> <from EU> <to ET> <to EU> [inv]\n", cname);
  	return (1);
  }
--- 217,223 ----
  	return (0);
  
   usage:
! 	(void) fprintf(stderr, "usage: chio %s "
  	    "<from ET> <from EU> <to ET> <to EU> [inv]\n", cname);
  	return (1);
  }
***************
*** 234,240 ****
  		warnx("%s: too many arguments", cname);
  		goto usage;
  	}
! 	bzero(&cmd, sizeof(cmd));
  
  	/* <src ET>  */
  	cmd.ce_srctype = parse_element_type(*argv);
--- 245,251 ----
  		warnx("%s: too many arguments", cname);
  		goto usage;
  	}
! 	(void) memset(&cmd, 0, sizeof(cmd));
  
  	/* <src ET>  */
  	cmd.ce_srctype = parse_element_type(*argv);
***************
*** 299,305 ****
  	return (0);
  
   usage:
! 	fprintf(stderr,
  		"usage: chio %s <src ET> <src EU> <dst1 ET> <dst1 EU>\n"
  		"       [<dst2 ET> <dst2 EU>] [inv1] [inv2]\n", cname);
  	return (1);
--- 310,316 ----
  	return (0);
  
   usage:
! 	(void) fprintf(stderr,
  		"usage: chio %s <src ET> <src EU> <dst1 ET> <dst1 EU>\n"
  		"       [<dst2 ET> <dst2 EU>] [inv1] [inv2]\n", cname);
  	return (1);
***************
*** 328,334 ****
  		warnx("%s: too many arguments", cname);
  		goto usage;
  	}
! 	bzero(&cmd, sizeof(cmd));
  
  	/* <to ET>  */
  	cmd.cp_type = parse_element_type(*argv);
--- 339,345 ----
  		warnx("%s: too many arguments", cname);
  		goto usage;
  	}
! 	(void) memset(&cmd, 0, sizeof(cmd));
  
  	/* <to ET>  */
  	cmd.cp_type = parse_element_type(*argv);
***************
*** 360,369 ****
  	return (0);
  
   usage:
! 	fprintf(stderr, "usage: chio %s <to ET> <to EU> [inv]\n", cname);
  	return (1);
  }
  
  static int
  do_params(cname, argc, argv)
  	char *cname;
--- 371,381 ----
  	return (0);
  
   usage:
! 	(void) fprintf(stderr, "usage: chio %s <to ET> <to EU> [inv]\n", cname);
  	return (1);
  }
  
+ /* ARGSUSED */
  static int
  do_params(cname, argc, argv)
  	char *cname;
***************
*** 374,405 ****
  
  	/* No arguments to this command. */
  	if (argc) {
! 		warnx("%s: no arguements expected", cname);
  		goto usage;
  	}
  
  	/* Get params from changer and display them. */
! 	bzero(&data, sizeof(data));
  	if (ioctl(changer_fd, CHIOGPARAMS, (char *)&data))
  		err(1, "%s: CHIOGPARAMS", changer_name);
  
! 	printf("%s: %d slot%s, %d drive%s, %d picker%s",
  	    changer_name,
  	    data.cp_nslots, (data.cp_nslots > 1) ? "s" : "",
  	    data.cp_ndrives, (data.cp_ndrives > 1) ? "s" : "",
  	    data.cp_npickers, (data.cp_npickers > 1) ? "s" : "");
  	if (data.cp_nportals)
! 		printf(", %d portal%s", data.cp_nportals,
  		    (data.cp_nportals > 1) ? "s" : "");
! 	printf("\n%s: current picker: %d\n", changer_name, data.cp_curpicker);
  
  	return (0);
  
   usage:
! 	fprintf(stderr, "usage: chio %s\n", cname);
  	return (1);
  }
  
  static int
  do_getpicker(cname, argc, argv)
  	char *cname;
--- 386,419 ----
  
  	/* No arguments to this command. */
  	if (argc) {
! 		warnx("%s: no arguments expected", cname);
  		goto usage;
  	}
  
  	/* Get params from changer and display them. */
! 	(void) memset(&data, 0, sizeof(data));
  	if (ioctl(changer_fd, CHIOGPARAMS, (char *)&data))
  		err(1, "%s: CHIOGPARAMS", changer_name);
  
! 	(void) printf("%s: %d slot%s, %d drive%s, %d picker%s",
  	    changer_name,
  	    data.cp_nslots, (data.cp_nslots > 1) ? "s" : "",
  	    data.cp_ndrives, (data.cp_ndrives > 1) ? "s" : "",
  	    data.cp_npickers, (data.cp_npickers > 1) ? "s" : "");
  	if (data.cp_nportals)
! 		(void) printf(", %d portal%s", data.cp_nportals,
  		    (data.cp_nportals > 1) ? "s" : "");
! 	(void) printf("\n%s: current picker: %d\n", changer_name,
! 		data.cp_curpicker);
  
  	return (0);
  
   usage:
! 	(void) fprintf(stderr, "usage: chio %s\n", cname);
  	return (1);
  }
  
+ /* ARGSUSED */
  static int
  do_getpicker(cname, argc, argv)
  	char *cname;
***************
*** 418,429 ****
  	if (ioctl(changer_fd, CHIOGPICKER, (char *)&picker))
  		err(1, "%s: CHIOGPICKER", changer_name);
  
! 	printf("%s: current picker: %d\n", changer_name, picker);
  
  	return (0);
  
   usage:
! 	fprintf(stderr, "usage: chio %s\n", cname);
  	return (1);
  }
  
--- 432,443 ----
  	if (ioctl(changer_fd, CHIOGPICKER, (char *)&picker))
  		err(1, "%s: CHIOGPICKER", changer_name);
  
! 	(void) printf("%s: current picker: %d\n", changer_name, picker);
  
  	return (0);
  
   usage:
! 	(void) fprintf(stderr, "usage: chio %s\n", cname);
  	return (1);
  }
  
***************
*** 452,458 ****
  	return (0);
  
   usage:
! 	fprintf(stderr, "usage: chio %s <picker>\n", cname);
  	return (1);
  }
  
--- 466,472 ----
  	return (0);
  
   usage:
! 	(void) fprintf(stderr, "usage: chio %s <picker>\n", cname);
  	return (1);
  }
  
***************
*** 465,476 ****
  	struct changer_element_status cmd;
  	struct changer_params data;
  	u_int8_t *statusp;
! 	int i, count, chet, schet, echet;
  	char *description;
  
- 	count = 0;
- 	description = NULL;
- 
  	/*
  	 * On a status command, we expect the following:
  	 *
--- 479,488 ----
  	struct changer_element_status cmd;
  	struct changer_params data;
  	u_int8_t *statusp;
! 	int i, chet, schet, echet;
! 	size_t count;
  	char *description;
  
  	/*
  	 * On a status command, we expect the following:
  	 *
***************
*** 490,496 ****
  	 * Get params from changer.  Specifically, we need the element
  	 * counts.
  	 */
! 	bzero(&data, sizeof(data));
  	if (ioctl(changer_fd, CHIOGPARAMS, (char *)&data))
  		err(1, "%s: CHIOGPARAMS", changer_name);
  
--- 502,508 ----
  	 * Get params from changer.  Specifically, we need the element
  	 * counts.
  	 */
! 	(void) memset(&data, 0, sizeof(data));
  	if (ioctl(changer_fd, CHIOGPARAMS, (char *)&data))
  		err(1, "%s: CHIOGPARAMS", changer_name);
  
***************
*** 522,534 ****
  			count = data.cp_ndrives;
  			description = "drive";
  			break;
  		}
  
  		if (count == 0) {
  			if (argc == 0)
  				continue;
  			else {
! 				printf("%s: no %s elements\n",
  				    changer_name, description);
  				return (0);
  			}
--- 534,551 ----
  			count = data.cp_ndrives;
  			description = "drive";
  			break;
+ 
+ 		default:
+ 			/* To appease gcc -Wuninitialized. */
+ 			count = 0;
+ 			description = NULL;
  		}
  
  		if (count == 0) {
  			if (argc == 0)
  				continue;
  			else {
! 				(void) printf("%s: no %s elements\n",
  				    changer_name, description);
  				return (0);
  			}
***************
*** 538,545 ****
  		if ((statusp = (u_int8_t *)malloc(count)) == NULL)
  			errx(1, "can't allocate status storage");
  
! 		bzero(statusp, count);
! 		bzero(&cmd, sizeof(cmd));
  
  		cmd.ces_type = chet;
  		cmd.ces_data = statusp;
--- 555,562 ----
  		if ((statusp = (u_int8_t *)malloc(count)) == NULL)
  			errx(1, "can't allocate status storage");
  
! 		(void) memset(statusp, 0, count);
! 		(void) memset(&cmd, 0, sizeof(cmd));
  
  		cmd.ces_type = chet;
  		cmd.ces_data = statusp;
***************
*** 551,557 ****
  
  		/* Dump the status for each element of this type. */
  		for (i = 0; i < count; ++i) {
! 			printf("%s %d: %s\n", description, i,
  			    bits_to_string(statusp[i], CESTATUS_BITS));
  		}
  
--- 568,574 ----
  
  		/* Dump the status for each element of this type. */
  		for (i = 0; i < count; ++i) {
! 			(void) printf("%s %d: %s\n", description, i,
  			    bits_to_string(statusp[i], CESTATUS_BITS));
  		}
  
***************
*** 561,570 ****
  	return (0);
  
   usage:
! 	fprintf(stderr, "usage: chio %s [<element type>]\n", cname);
  	return (1);
  }
  
  static int
  parse_element_type(cp)
  	char *cp;
--- 578,601 ----
  	return (0);
  
   usage:
! 	(void) fprintf(stderr, "usage: chio %s [<element type>]\n", cname);
  	return (1);
  }
  
+ /* ARGSUSED */
+ static int
+ do_ielem(cname, argc, argv)
+ 	char *cname;
+ 	int argc;
+ 	char **argv;
+ {
+ 	if (ioctl(changer_fd, CHIOIELEM, NULL))
+ 		err(1, "%s: CHIOIELEM", changer_name);
+ 
+ 	return (0);
+ }
+ 
+ 
  static int
  parse_element_type(cp)
  	char *cp;
***************
*** 576,581 ****
--- 607,613 ----
  			return (elements[i].et_type);
  
  	errx(1, "invalid element type `%s'", cp);
+ 	/* NOTREACHED */
  }
  
  static int
***************
*** 603,608 ****
--- 635,641 ----
  		return (val);
  
  	errx(1, "invalid modifier `%s'", cp);
+ 	/* NOTREACHED */
  }
  
  static int
***************
*** 628,634 ****
  	static char buf[128];
  
  	bp = buf;
! 	bzero(buf, sizeof(buf));
  
  	for (sep = '<'; (f = *cp++) != 0; cp = np) {
  		for (np = cp; *np >= ' ';)
--- 661,667 ----
  	static char buf[128];
  
  	bp = buf;
! 	(void) memset(buf, 0, sizeof(buf));
  
  	for (sep = '<'; (f = *cp++) != 0; cp = np) {
  		for (np = cp; *np >= ' ';)
***************
*** 636,642 ****
  		if ((v & (1 << (f - 1))) == 0)
  			continue;
  		bp += snprintf(bp, sizeof(buf) - (bp - &buf[0]),
! 						"%c%.*s", sep, np - cp, cp);
  		sep = ',';
  	}
  	if (sep != '<')
--- 669,675 ----
  		if ((v & (1 << (f - 1))) == 0)
  			continue;
  		bp += snprintf(bp, sizeof(buf) - (bp - &buf[0]),
! 				"%c%.*s", sep, (int)(long)(np - cp), cp);
  		sep = ',';
  	}
  	if (sep != '<')
***************
*** 648,654 ****
  static void
  cleanup()
  {
- 
  	/* Simple enough... */
  	(void)close(changer_fd);
  }
--- 681,686 ----
diff -c -r /usr/src/bin/chio/defs.h /usr/local/src/bin/chio/defs.h
*** /usr/src/bin/chio/defs.h	Thu Mar  6 09:30:06 1997
--- /usr/local/src/bin/chio/defs.h	Sun Feb  1 20:18:06 1998
***************
*** 13,19 ****
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
!  *    must display the following acknowledgements:
   *	This product includes software developed by Jason R. Thorpe
   *	for And Communications, http://www.and.com/
   * 4. The name of the author may not be used to endorse or promote products
--- 13,19 ----
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
!  *    must display the following acknowledgments:
   *	This product includes software developed by Jason R. Thorpe
   *	for And Communications, http://www.and.com/
   * 4. The name of the author may not be used to endorse or promote products
diff -c -r /usr/src/bin/chio/pathnames.h /usr/local/src/bin/chio/pathnames.h
*** /usr/src/bin/chio/pathnames.h	Thu Mar  6 09:30:06 1997
--- /usr/local/src/bin/chio/pathnames.h	Mon Feb  2 19:23:06 1998
***************
*** 13,19 ****
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
!  *    must display the following acknowledgements:
   *	This product includes software developed by Jason R. Thorpe
   *	for And Communications, http://www.and.com/
   * 4. The name of the author may not be used to endorse or promote products
--- 13,19 ----
   *    notice, this list of conditions and the following disclaimer in the
   *    documentation and/or other materials provided with the distribution.
   * 3. All advertising materials mentioning features or use of this software
!  *    must display the following acknowledgments:
   *	This product includes software developed by Jason R. Thorpe
   *	for And Communications, http://www.and.com/
   * 4. The name of the author may not be used to endorse or promote products
*** /usr/src/sys/sys/chio.h	Tue Mar 11 13:38:02 1997
--- /usr/local/src/sys/sys/chio.h	Mon Feb  2 20:15:20 1998
***************
*** 151,156 ****
--- 151,157 ----
  #define CHIOGPICKER	_IOR('c', 0x04, int)
  #define CHIOSPICKER	_IOW('c', 0x05, int)
  #define CHIOGPARAMS	_IOR('c', 0x06, struct changer_params)
+ #define CHIOIELEM	_IO('c', 0x07)
  #define CHIOGSTATUS	_IOW('c', 0x08, struct changer_element_status)
  
  #endif /* !_SYS_CHIO_H_ */

>Release-Note:
>Audit-Trail:

From: Bruce Evans <bde@zeta.org.au>
To: freebsd-gnats-submit@FreeBSD.ORG, jason_smethers@bigfoot.com
Cc:  Subject: Re: bin/5712: /bin/chio code cleaup and option added
Date: Thu, 12 Feb 1998 03:22:55 +1100

 Review (points noted in review of `cat' cleanup not all repeated):
 
 >diff -c -r /usr/src/bin/chio/chio.1 /usr/local/src/bin/chio/chio.1
 >*** /usr/src/bin/chio/chio.1	Sat Sep 13 11:01:18 1997
 >--- /usr/local/src/bin/chio/chio.1	Sun Feb  8 21:16:55 1998
 >...
 >--- 190,203 ----
 >  Moves the media in slot 3 (fourth slot) to drive 0 (first drive).
 >  .Pp
 >  .Nm chio setpicker 2
 >+ .Pp
 >  Configures the changer to use picker 2 (third picker) for operations.
 >  .Pp
 >  .Sh FILES
 >  /dev/ch0 - default changer device
 >  .Sh SEE ALSO
 >  .Xr mt 1 ,
 >! .Xr ch 4
 >  .Xr mount 8 .
 >...
 
 Lost a comma.
 
 >diff -c -r /usr/src/bin/chio/chio.c /usr/local/src/bin/chio/chio.c
 >*** /usr/src/bin/chio/chio.c	Fri Jun  6 01:32:09 1997
 >--- /usr/local/src/bin/chio/chio.c	Sun Feb  8 19:08:22 1998
 
 >***************
 >*** 47,52 ****
 >--- 47,53 ----
 >  #include "defs.h"
 >  #include "pathnames.h"
 >  
 >+ int	main __P((int, char *[]));
 >  static	void usage __P((void));
 >  static	void cleanup __P((void));
 >  static	int parse_element_type __P((char *));
 >***************
 >*** 62,67 ****
 >--- 63,69 ----
 >  static	int do_getpicker __P((char *, int, char **));
 >  static	int do_setpicker __P((char *, int, char **));
 >  static	int do_status __P((char *, int, char **));
 >+ static	int do_ielem __P((char *, int, char **));
 >  
 >  /* Valid changer element types. */
 >  const struct element_type elements[] = {
 >***************
 >*** 81,86 ****
 >--- 83,89 ----
 >  	{ "getpicker",		do_getpicker },
 >  	{ "setpicker",		do_setpicker },
 >  	{ "status",		do_status },
 >+ 	{ "ielem", 		do_ielem },
 >  	{ NULL,			0 },
 >  };
 >  
 
 The lists are more disordered than before.
 
 >***************
 >*** 135,146 ****
 >--- 138,157 ----
 >  	for (i = 0; commands[i].cc_name != NULL; ++i)
 >  		if (strcmp(*argv, commands[i].cc_name) == 0)
 >  			break;
 >+ 	if (commands[i].cc_name == NULL) {
 >+ 		/* look for abbreviation */
 >+ 		for (i = 0; commands[i].cc_name != NULL; ++i)
 >+ 			if (strncmp(*argv, commands[i].cc_name,
 >+ 				strlen(*argv)) == 0)
 >+ 					break;
 >+ 	}
 >  	if (commands[i].cc_name == NULL)
 >  		errx(1, "unknown command: %s", *argv);
 >  
 >  	/* Skip over the command name and call handler. */
 >  	++argv; --argc;
 >  	exit ((*commands[i].cc_handler)(commands[i].cc_name, argc, argv));
 >+ 	/* NOTREACHED */
 >  }
 
 I don't like comments for a nonexistent/unusable lint.  gcc knows that
 exit() doesn't return.
 
 >  static int
 >***************
 >*** 166,172 ****
 >  		warnx("%s: too many arguments", cname);
 >  		goto usage;
 >  	}
 >! 	bzero(&cmd, sizeof(cmd));
 >  
 >  	/* <from ET>  */
 >  	cmd.cm_fromtype = parse_element_type(*argv);
 >--- 177,183 ----
 >  		warnx("%s: too many arguments", cname);
 >  		goto usage;
 >  	}
 >! 	(void) memset(&cmd, 0, sizeof(cmd));
 >  
 >  	/* <from ET>  */
 >  	cmd.cm_fromtype = parse_element_type(*argv);
 
 style(9) specifies no space after casts.  This rule is followed only
 about half the time for casts of function return values in the kernel,
 but I think it should be followed in new code.  I don't like casting
 function return values anyway.
 
 >--- 534,551 ----
 >...
 >+ 
 >+ 		default:
 >+ 			/* To appease gcc -Wuninitialized. */
 >+ 			count = 0;
 >+ 			description = NULL;
 
 Not initializing `count' would just be a bug.  Only `description' must
 be set to appease gcc.
 
 >--- 578,601 ----
 >...
 >+ /* ARGSUSED */
 >+ static int
 >+ do_ielem(cname, argc, argv)
 >+ 	char *cname;
 >+ 	int argc;
 >+ 	char **argv;
 >+ {
 >+ 	if (ioctl(changer_fd, CHIOIELEM, NULL))
 >+ 		err(1, "%s: CHIOIELEM", changer_name);
 >+ 
 >+ 	return (0);
 >+ }
 >+ 
 >+ 
 >  static int
 >  parse_element_type(cp)
 >  	char *cp;
 
 style(9) should specify that there are no empty lines between statements
 except to separate blocks of code headed by a comment, and no pairs of
 empty lines.
 
 >***************
 >*** 576,581 ****
 >--- 607,613 ----
 >  			return (elements[i].et_type);
 >  
 >  	errx(1, "invalid element type `%s'", cp);
 >+ 	/* NOTREACHED */
 >  }
 >  
 >  static int
 
 gcc also understands that errx() returns.  I think the author of lint
 was going to teach it about gcc attributes, but has stopped working on it.
 
 >***************
 >*** 636,642 ****
 >  		if ((v & (1 << (f - 1))) == 0)
 >  			continue;
 >  		bp += snprintf(bp, sizeof(buf) - (bp - &buf[0]),
 >! 						"%c%.*s", sep, np - cp, cp);
 >  		sep = ',';
 >  	}
 >  	if (sep != '<')
 >--- 669,675 ----
 >  		if ((v & (1 << (f - 1))) == 0)
 >  			continue;
 >  		bp += snprintf(bp, sizeof(buf) - (bp - &buf[0]),
 >! 				"%c%.*s", sep, (int)(long)(np - cp), cp);
 >  		sep = ',';
 >  	}
 >  	if (sep != '<')
 
 style(9) specifies a secondary indent of 4.  Casting to (long) is bogus
 here.
 
 >***************
 >*** 648,654 ****
 >  static void
 >  cleanup()
 >  {
 >- 
 >  	/* Simple enough... */
 >  	(void)close(changer_fd);
 >  }
 
 style(9) specifies the empty line that was here.
 
 Bruce

From: "Jason" <jason_smethers@bigfoot.com>
To: <bug-followup@FreeBSD.ORG>
Cc:  Subject: Re: bin/5712
Date: Sun, 15 Feb 1998 13:16:54 -0600

 Adds IELEM option from NetBSD/OpenBSD
 
 Cleaned up diffs:
 
 
 begin 666 bin.chio.all.diff
 M3VYL>2!I;B O=7-R+VQO8V%L+W-R8R]B:6XO8VAI;SH@8VAI;PID:69F("UC
 M("UR("]U<W(O<W)C+V)I;B]C:&EO+V-H:6\N,2 O=7-R+VQO8V%L+W-R8R]B
 M:6XO8VAI;R]C:&EO+C$**BHJ("]U<W(O<W)C+V)I;B]C:&EO+V-H:6\N,0E3
 M870@4V5P(#$S(#$Q.C Q.C$X(#$Y.3<*+2TM("]U<W(O;&]C86PO<W)C+V)I
 M;B]C:&EO+V-H:6\N,0E4:'4@1F5B(#$R(#$Y.C$X.C U(#$Y.3@**BHJ*BHJ
 M*BHJ*BHJ*BHJ"BHJ*B Q-S<L,3@S("HJ*BH*(" N270@3FT@04-#15-3"B @
 M365D:6$@:6X@=&AI<R!E;&5M96YT(&ES(&%C8V5S<VEB;&4@8GD@82!P:6-K
 M97(N"B @+DET($YM($5814Y!0@HA($5L96UE;G0@<W5P<&]R=',@<&%S<VEN
 M9R!M961I82 H97AP;W)T:6YG*2!T;R!A;B!O=71S:71E(&AU;6%N(&]P97)A
 M=&]R+@H@("Y)="!.;2!)3D5.04(*("!%;&5M96YT('-U<'!O<G1S(')E8V5I
 M=FEN9R!M961I82 H:6UP;W)T:6YG*2!F<F]M(&%N(&]U='-I9&4@:'5M86X@
 M;W!E<F%T;W(N"B @+D5L"BTM+2 Q-S<L,3@U("TM+2T*(" N270@3FT@04-#
 M15-3"B @365D:6$@:6X@=&AI<R!E;&5M96YT(&ES(&%C8V5S<VEB;&4@8GD@
 M82!P:6-K97(N"B @+DET($YM($5814Y!0@HA($5L96UE;G0@<W5P<&]R=',@
 M<&%S<VEN9R!M961I82 H97AP;W)T:6YG*2!T;R!A;B!O=71S:61E(&AU;6%N
 M(&]P97)A=&]R+@HA("Y)="!.;2!)14Q%30HA(%!E<F9O<FT@86X@7&9"24Y)
 M5$E!3$E:12!%3$5-14Y4(%-405154UQF4B!O<&5R871I;VX@;VX@=&AE(&-H
 M86YG97(N"B @+DET($YM($E.14Y!0@H@($5L96UE;G0@<W5P<&]R=',@<F5C
 M96EV:6YG(&UE9&EA("AI;7!O<G1I;F<I(&9R;VT@86X@;W5T<VED92!H=6UA
 M;B!O<&5R871O<BX*(" N16P**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B Q.#@L,3DS
 M("HJ*BH*+2TM(#$Y,"PQ.38@+2TM+0H@($UO=F5S('1H92!M961I82!I;B!S
 M;&]T(#,@*&9O=7)T:"!S;&]T*2!T;R!D<FEV92 P("AF:7)S="!D<FEV92DN
 M"B @+E!P"B @+DYM(&-H:6\@<V5T<&EC:V5R(#(**R N4' *("!#;VYF:6=U
 M<F5S('1H92!C:&%N9V5R('1O('5S92!P:6-K97(@,B H=&AI<F0@<&EC:V5R
 M*2!F;W(@;W!E<F%T:6]N<RX*(" N4' *(" N4V@@1DE,15,*9&EF9B M8R M
 M<B O=7-R+W-R8R]B:6XO8VAI;R]C:&EO+F,@+W5S<B]L;V-A;"]S<F,O8FEN
 M+V-H:6\O8VAI;RYC"BHJ*B O=7-R+W-R8R]B:6XO8VAI;R]C:&EO+F,)5V5D
 M($9E8B Q,2 Q.#HP-CHP-2 Q.3DX"BTM+2 O=7-R+VQO8V%L+W-R8R]B:6XO
 M8VAI;R]C:&EO+F,)4W5N($9E8B Q-2 Q,CHU-SHT-2 Q.3DX"BHJ*BHJ*BHJ
 M*BHJ*BHJ*@HJ*BH@-#DL-C4@*BHJ*@H@( H@('-T871I8PEV;VED('5S86=E
 M(%]?4"@H=F]I9"DI.PH@('-T871I8PEV;VED(&-L96%N=7 @7U]0*"AV;VED
 M*2D["B @<W1A=&EC"6EN="!P87)S95]E;&5M96YT7W1Y<&4@7U]0*"AC:&%R
 M("HI*3L*("!S=&%T:6,):6YT('!A<G-E7V5L96UE;G1?=6YI="!?7U H*&-H
 M87(@*BDI.PH@('-T871I8PEI;G0@<&%R<V5?<W!E8VEA;"!?7U H*&-H87(@
 M*BDI.PH@('-T871I8PEI;G0@:7-?<W!E8VEA;"!?7U H*&-H87(@*BDI.PH@
 M('-T871I8PEC:&%R("IB:71S7W1O7W-T<FEN9R!?7U H*&EN="P@8V]N<W0@
 M8VAA<B J*2D["B @"BT@<W1A=&EC"6EN="!D;U]M;W9E(%]?4"@H8VAA<B J
 M+"!I;G0L(&-H87(@*BHI*3L*("!S=&%T:6,):6YT(&1O7V5X8VAA;F=E(%]?
 M4"@H8VAA<B J+"!I;G0L(&-H87(@*BHI*3L*("!S=&%T:6,):6YT(&1O7W!O
 M<VET:6]N(%]?4"@H8VAA<B J+"!I;G0L(&-H87(@*BHI*3L*("!S=&%T:6,)
 M:6YT(&1O7W!A<F%M<R!?7U H*&-H87(@*BP@:6YT+"!C:&%R("HJ*2D["BT@
 M<W1A=&EC"6EN="!D;U]G971P:6-K97(@7U]0*"AC:&%R("HL(&EN="P@8VAA
 M<B J*BDI.PH@('-T871I8PEI;G0@9&]?<V5T<&EC:V5R(%]?4"@H8VAA<B J
 M+"!I;G0L(&-H87(@*BHI*3L*("!S=&%T:6,):6YT(&1O7W-T871U<R!?7U H
 M*&-H87(@*BP@:6YT+"!C:&%R("HJ*2D["B @"BTM+2 T.2PV-R M+2TM"B @
 M"B @<W1A=&EC"79O:60@=7-A9V4@7U]0*"AV;VED*2D["B @<W1A=&EC"79O
 M:60@8VQE86YU<"!?7U H*'9O:60I*3L**R ):6YT(&UA:6X@7U]0*"AI;G0L
 M(&-H87(@*EM=*2D["B @<W1A=&EC"6EN="!P87)S95]E;&5M96YT7W1Y<&4@
 M7U]0*"AC:&%R("HI*3L*("!S=&%T:6,):6YT('!A<G-E7V5L96UE;G1?=6YI
 M="!?7U H*&-H87(@*BDI.PH@('-T871I8PEI;G0@<&%R<V5?<W!E8VEA;"!?
 M7U H*&-H87(@*BDI.PH@('-T871I8PEI;G0@:7-?<W!E8VEA;"!?7U H*&-H
 M87(@*BDI.PH@('-T871I8PEC:&%R("IB:71S7W1O7W-T<FEN9R!?7U H*&EN
 M="P@8V]N<W0@8VAA<B J*2D["B @"B @<W1A=&EC"6EN="!D;U]E>&-H86YG
 M92!?7U H*&-H87(@*BP@:6YT+"!C:&%R("HJ*2D["BL@<W1A=&EC"6EN="!D
 M;U]G971P:6-K97(@7U]0*"AC:&%R("HL(&EN="P@8VAA<B J*BDI.PHK('-T
 M871I8PEI;G0@9&]?:65L96T@7U]0*"AC:&%R("HL(&EN="P@8VAA<B J*BDI
 M.PHK('-T871I8PEI;G0@9&]?;6]V92!?7U H*&-H87(@*BP@:6YT+"!C:&%R
 M("HJ*2D["B @<W1A=&EC"6EN="!D;U]P;W-I=&EO;B!?7U H*&-H87(@*BP@
 M:6YT+"!C:&%R("HJ*2D["B @<W1A=&EC"6EN="!D;U]P87)A;7,@7U]0*"AC
 M:&%R("HL(&EN="P@8VAA<B J*BDI.PH@('-T871I8PEI;G0@9&]?<V5T<&EC
 M:V5R(%]?4"@H8VAA<B J+"!I;G0L(&-H87(@*BHI*3L*("!S=&%T:6,):6YT
 M(&1O7W-T871U<R!?7U H*&-H87(@*BP@:6YT+"!C:&%R("HJ*2D["B @"BHJ
 M*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-S0L.#0@*BHJ*@H@( H@("\J(%9A;&ED(&-O
 M;6UA;F1S+B J+PH@(&-O;G-T('-T<G5C="!C:&%N9V5R7V-O;6UA;F0@8V]M
 M;6%N9'-;72 ]('L*+2 )>R B;6]V92(L"0ED;U]M;W9E('TL"B @"7L@(F5X
 M8VAA;F=E(BP)"61O7V5X8VAA;F=E('TL"B @"7L@(G!O<VET:6]N(BP)"61O
 M7W!O<VET:6]N('TL"B @"7L@(G!A<F%M<R(L"0ED;U]P87)A;7,@?2P*+2 )
 M>R B9V5T<&EC:V5R(BP)"61O7V=E='!I8VME<B!]+ H@( E[(")S971P:6-K
 M97(B+ D)9&]?<V5T<&EC:V5R('TL"B @"7L@(G-T871U<R(L"0ED;U]S=&%T
 M=7,@?2P*(" )>R!.54Q,+ D)"3 @?2P*+2TM(#<V+#@W("TM+2T*(" *(" O
 M*B!686QI9"!C;VUM86YD<RX@*B\*("!C;VYS="!S=')U8W0@8VAA;F=E<E]C
 M;VUM86YD(&-O;6UA;F1S6UT@/2!["B @"7L@(F5X8VAA;F=E(BP)"61O7V5X
 M8VAA;F=E('TL"BL@"7L@(F=E='!I8VME<B(L"0ED;U]G971P:6-K97(@?2P*
 M*R )>R B:65L96TB+" )"61O7VEE;&5M('TL"BL@"7L@(FUO=F4B+ D)9&]?
 M;6]V92!]+ H@( E[(")P;W-I=&EO;B(L"0ED;U]P;W-I=&EO;B!]+ H@( E[
 M(")P87)A;7,B+ D)9&]?<&%R86US('TL"B @"7L@(G-E='!I8VME<B(L"0ED
 M;U]S971P:6-K97(@?2P*(" )>R B<W1A='5S(BP)"61O7W-T871U<R!]+ H@
 M( E[($Y53$PL"0D),"!]+ HJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#DX+#$P-" J
 M*BHJ"B @:6YT"B @;6%I;BAA<F=C+"!A<F=V*0H@( EI;G0@87)G8SL*(2 )
 M8VAA<B J*F%R9W8["B @>PH@( EI;G0@8V@L(&D["B @"BTM+2 Q,#$L,3 W
 M("TM+2T*("!I;G0*("!M86EN*&%R9V,L(&%R9W8I"B @"6EN="!A<F=C.PHA
 M( EC:&%R("IA<F=V6UT["B @>PH@( EI;G0@8V@L(&D["B @"BHJ*BHJ*BHJ
 M*BHJ*BHJ*@HJ*BH@,3,U+#$T," J*BHJ"BTM+2 Q,S@L,34P("TM+2T*(" )
 M9F]R("AI(#T@,#L@8V]M;6%N9'-;:5TN8V-?;F%M92 A/2!.54Q,.R K*VDI
 M"B @"0EI9B H<W1R8VUP*"IA<F=V+"!C;VUM86YD<UMI72YC8U]N86UE*2 ]
 M/2 P*0H@( D)"6)R96%K.PHK( EI9B H8V]M;6%N9'-;:5TN8V-?;F%M92 ]
 M/2!.54Q,*2!["BL@"0DO*B!L;V]K(&9O<B!A8F)R979I871I;VX@*B\**R )
 M"69O<B H:2 ](# [(&-O;6UA;F1S6VE=+F-C7VYA;64@(3T@3E5,3#L@*RMI
 M*0HK( D)"6EF("AS=')N8VUP*"IA<F=V+"!C;VUM86YD<UMI72YC8U]N86UE
 M+ HK( D)"0ES=')L96XH*F%R9W8I*2 ]/2 P*0HK( D)"0D)8G)E86L["BL@
 M"7T*(" ):68@*&-O;6UA;F1S6VE=+F-C7VYA;64@/3T@3E5,3"D*(" )"65R
 M<G@H,2P@(G5N:VYO=VX@8V]M;6%N9#H@)7,B+" J87)G=BD["B @"BHJ*BHJ
 M*BHJ*BHJ*BHJ*@HJ*BH@,38V+#$W,B J*BHJ"B @"0EW87)N>"@B)7,Z('1O
 M;R!M86YY(&%R9W5M96YT<R(L(&-N86UE*3L*(" )"6=O=&\@=7-A9V4["B @
 M"7T*(2 )8GIE<F\H)F-M9"P@<VEZ96]F*&-M9"DI.PH@( H@( DO*B \9G)O
 M;2!%5#X@("HO"B @"6-M9"YC;5]F<F]M='EP92 ]('!A<G-E7V5L96UE;G1?
 M='EP92@J87)G=BD["BTM+2 Q-S8L,3@R("TM+2T*(" )"7=A<FYX*"(E<SH@
 M=&]O(&UA;GD@87)G=6UE;G1S(BP@8VYA;64I.PH@( D)9V]T;R!U<V%G93L*
 M(" )?0HA( EM96US970H)F-M9"P@,"P@<VEZ96]F*&-M9"DI.PH@( H@( DO
 M*B \9G)O;2!%5#X@("HO"B @"6-M9"YC;5]F<F]M='EP92 ]('!A<G-E7V5L
 M96UE;G1?='EP92@J87)G=BD["BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@,C,T+#(T
 M," J*BHJ"B @"0EW87)N>"@B)7,Z('1O;R!M86YY(&%R9W5M96YT<R(L(&-N
 M86UE*3L*(" )"6=O=&\@=7-A9V4["B @"7T*(2 )8GIE<F\H)F-M9"P@<VEZ
 M96]F*&-M9"DI.PH@( H@( DO*B \<W)C($54/B @*B\*(" )8VUD+F-E7W-R
 M8W1Y<&4@/2!P87)S95]E;&5M96YT7W1Y<&4H*F%R9W8I.PHM+2T@,C0T+#(U
 M," M+2TM"B @"0EW87)N>"@B)7,Z('1O;R!M86YY(&%R9W5M96YT<R(L(&-N
 M86UE*3L*(" )"6=O=&\@=7-A9V4["B @"7T*(2 );65M<V5T*"9C;60L(# L
 M('-I>F5O9BAC;60I*3L*(" *(" )+RH@/'-R8R!%5#X@("HO"B @"6-M9"YC
 M95]S<F-T>7!E(#T@<&%R<V5?96QE;65N=%]T>7!E*"IA<F=V*3L**BHJ*BHJ
 M*BHJ*BHJ*BHJ"BHJ*B S,C@L,S,T("HJ*BH*(" )"7=A<FYX*"(E<SH@=&]O
 M(&UA;GD@87)G=6UE;G1S(BP@8VYA;64I.PH@( D)9V]T;R!U<V%G93L*(" )
 M?0HA( EB>F5R;R@F8VUD+"!S:7IE;V8H8VUD*2D["B @"B @"2\J(#QT;R!%
 M5#X@("HO"B @"6-M9"YC<%]T>7!E(#T@<&%R<V5?96QE;65N=%]T>7!E*"IA
 M<F=V*3L*+2TM(#,S."PS-#0@+2TM+0H@( D)=V%R;G@H(B5S.B!T;V\@;6%N
 M>2!A<F=U;65N=',B+"!C;F%M92D["B @"0EG;W1O('5S86=E.PH@( E]"B$@
 M"6UE;7-E="@F8VUD+" P+"!S:7IE;V8H8VUD*2D["B @"B @"2\J(#QT;R!%
 M5#X@("HO"B @"6-M9"YC<%]T>7!E(#T@<&%R<V5?96QE;65N=%]T>7!E*"IA
 M<F=V*3L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B S-SDL,S@U("HJ*BH*(" )?0H@
 M( H@( DO*B!'970@<&%R86US(&9R;VT@8VAA;F=E<B!A;F0@9&ES<&QA>2!T
 M:&5M+B J+PHA( EB>F5R;R@F9&%T82P@<VEZ96]F*&1A=&$I*3L*(" ):68@
 M*&EO8W1L*&-H86YG97)?9F0L($-(24]'4$%204U3+" H8VAA<B J*29D871A
 M*2D*(" )"65R<B@Q+" B)7,Z($-(24]'4$%204U3(BP@8VAA;F=E<E]N86UE
 M*3L*(" *+2TM(#,X.2PS.34@+2TM+0H@( E]"B @"B @"2\J($=E="!P87)A
 M;7,@9G)O;2!C:&%N9V5R(&%N9"!D:7-P;&%Y('1H96TN("HO"B$@"6UE;7-E
 M="@F9&%T82P@,"P@<VEZ96]F*&1A=&$I*3L*(" ):68@*&EO8W1L*&-H86YG
 M97)?9F0L($-(24]'4$%204U3+" H8VAA<B J*29D871A*2D*(" )"65R<B@Q
 M+" B)7,Z($-(24]'4$%204U3(BP@8VAA;F=E<E]N86UE*3L*(" **BHJ*BHJ
 M*BHJ*BHJ*BHJ"BHJ*B T-C4L-#<V("HJ*BH*(" )<W1R=6-T(&-H86YG97)?
 M96QE;65N=%]S=&%T=7,@8VUD.PH@( ES=')U8W0@8VAA;F=E<E]P87)A;7,@
 M9&%T83L*(" )=5]I;G0X7W0@*G-T871U<W ["B$@"6EN="!I+"!C;W5N="P@
 M8VAE="P@<V-H970L(&5C:&5T.PH@( EC:&%R("ID97-C<FEP=&EO;CL*(" *
 M+2 )8V]U;G0@/2 P.PHM( ED97-C<FEP=&EO;B ]($Y53$P["BT@"B @"2\J
 M"B @"2 J($]N(&$@<W1A='5S(&-O;6UA;F0L('=E(&5X<&5C="!T:&4@9F]L
 M;&]W:6YG.@H@( D@*@HM+2T@-#<U+#0X-" M+2TM"B @"7-T<G5C="!C:&%N
 M9V5R7V5L96UE;G1?<W1A='5S(&-M9#L*(" )<W1R=6-T(&-H86YG97)?<&%R
 M86US(&1A=&$["B @"75?:6YT.%]T("IS=&%T=7-P.PHA( EI;G0@:2P@8VAE
 M="P@<V-H970L(&5C:&5T.PHA( ES:7IE7W0@8V]U;G0["B @"6-H87(@*F1E
 M<V-R:7!T:6]N.PH@( H@( DO*@H@( D@*B!/;B!A('-T871U<R!C;VUM86YD
 M+"!W92!E>'!E8W0@=&AE(&9O;&QO=VEN9SH*(" )("H**BHJ*BHJ*BHJ*BHJ
 M*BHJ"BHJ*B T.3 L-#DV("HJ*BH*(" )("H@1V5T('!A<F%M<R!F<F]M(&-H
 M86YG97(N("!3<&5C:69I8V%L;'DL('=E(&YE960@=&AE(&5L96UE;G0*(" )
 M("H@8V]U;G1S+@H@( D@*B\*(2 )8GIE<F\H)F1A=&$L('-I>F5O9BAD871A
 M*2D["B @"6EF("AI;V-T;"AC:&%N9V5R7V9D+"!#2$E/1U!!4D%-4RP@*&-H
 M87(@*BDF9&%T82DI"B @"0EE<G(H,2P@(B5S.B!#2$E/1U!!4D%-4R(L(&-H
 M86YG97)?;F%M92D["B @"BTM+2 T.3@L-3 T("TM+2T*(" )("H@1V5T('!A
 M<F%M<R!F<F]M(&-H86YG97(N("!3<&5C:69I8V%L;'DL('=E(&YE960@=&AE
 M(&5L96UE;G0*(" )("H@8V]U;G1S+@H@( D@*B\*(2 );65M<V5T*"9D871A
 M+" P+"!S:7IE;V8H9&%T82DI.PH@( EI9B H:6]C=&PH8VAA;F=E<E]F9"P@
 M0TA)3T=005)!35,L("AC:&%R("HI)F1A=&$I*0H@( D)97)R*#$L("(E<SH@
 M0TA)3T=005)!35,B+"!C:&%N9V5R7VYA;64I.PH@( HJ*BHJ*BHJ*BHJ*BHJ
 M*BH**BHJ(#4R,BPU,C<@*BHJ*@HM+2T@-3,P+#4S.2 M+2TM"B @"0D)8V]U
 M;G0@/2!D871A+F-P7VYD<FEV97,["B @"0D)9&5S8W)I<'1I;VX@/2 B9')I
 M=F4B.PH@( D)"6)R96%K.PHK( HK( D)9&5F875L=#H**R )"0EC;W5N=" ]
 M(# ["BL@"0D)9&5S8W)I<'1I;VX@/2!.54Q,.PH@( D)?0H@( H@( D):68@
 M*&-O=6YT(#T](# I('L**BHJ*BHJ*BHJ*BHJ*BHJ"BHJ*B U,S@L-30U("HJ
 M*BH*(" )"6EF("@H<W1A='5S<" ]("AU7VEN=#A?=" J*6UA;&QO8RAC;W5N
 M="DI(#T]($Y53$PI"B @"0D)97)R>"@Q+" B8V%N)W0@86QL;V-A=&4@<W1A
 M='5S('-T;W)A9V4B*3L*(" *(2 )"6)Z97)O*'-T871U<W L(&-O=6YT*3L*
 M(2 )"6)Z97)O*"9C;60L('-I>F5O9BAC;60I*3L*(" *(" )"6-M9"YC97-?
 M='EP92 ](&-H970["B @"0EC;60N8V5S7V1A=&$@/2!S=&%T=7-P.PHM+2T@
 M-34P+#4U-R M+2TM"B @"0EI9B H*'-T871U<W @/2 H=5]I;G0X7W0@*BEM
 M86QL;V,H8V]U;G0I*2 ]/2!.54Q,*0H@( D)"65R<G@H,2P@(F-A;B=T(&%L
 M;&]C871E('-T871U<R!S=&]R86=E(BD["B @"B$@"0EM96US970H<W1A='5S
 M<"P@,"P@8V]U;G0I.PHA( D);65M<V5T*"9C;60L(# L('-I>F5O9BAC;60I
 M*3L*(" *(" )"6-M9"YC97-?='EP92 ](&-H970["B @"0EC;60N8V5S7V1A
 M=&$@/2!S=&%T=7-P.PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#4V-BPU-S$@*BHJ
 M*@HM+2T@-3<X+#4Y-2 M+2TM"B @?0H@( H@('-T871I8R!I;G0**R!D;U]I
 M96QE;2AC;F%M92P@87)G8RP@87)G=BD**R )8VAA<B J8VYA;64["BL@"6EN
 M="!A<F=C.PHK( EC:&%R("HJ87)G=CL**R!["BL@"6EF("AI;V-T;"AC:&%N
 M9V5R7V9D+"!#2$E/245,14TL($Y53$PI*0HK( D)97)R*#$L("(E<SH@0TA)
 M3TE%3$5-(BP@8VAA;F=E<E]N86UE*3L**R **R )<F5T=7)N("@P*3L**R!]
 M"BL@"BL@<W1A=&EC(&EN= H@('!A<G-E7V5L96UE;G1?='EP92AC<"D*(" )
 M8VAA<B J8W ["B @>PHJ*BHJ*BHJ*BHJ*BHJ*BH**BHJ(#8R."PV,S0@*BHJ
 M*@H@( ES=&%T:6,@8VAA<B!B=69;,3(X73L*(" *(" )8G @/2!B=68["B$@
 M"6)Z97)O*&)U9BP@<VEZ96]F*&)U9BDI.PH@( H@( EF;W(@*'-E<" ]("<\
 M)SL@*&8@/2 J8W K*RD@(3T@,#L@8W @/2!N<"D@>PH@( D)9F]R("AN<" ]
 M(&-P.R J;G @/CT@)R G.RD*+2TM(#8U,BPV-3@@+2TM+0H@( ES=&%T:6,@
 M8VAA<B!B=69;,3(X73L*(" *(" )8G @/2!B=68["B$@"6UE;7-E="AB=68L
 M(# L('-I>F5O9BAB=68I*3L*(" *(" )9F]R("AS97 @/2 G/"<[("AF(#T@
 M*F-P*RLI("$](# [(&-P(#T@;G I('L*(" )"69O<B H;G @/2!C<#L@*FYP
 M(#X]("<@)SLI"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@-C,V+#8T,B J*BHJ"B @
 M"0EI9B H*'8@)B H,2 \/" H9B M(#$I*2D@/3T@,"D*(" )"0EC;VYT:6YU
 M93L*(" )"6)P("L]('-N<')I;G1F*&)P+"!S:7IE;V8H8G5F*2 M("AB<" M
 M("9B=69;,%TI+ HA( D)"0D)"2(E8R4N*G,B+"!S97 L(&YP("T@8W L(&-P
 M*3L*(" )"7-E<" ]("<L)SL*(" )?0H@( EI9B H<V5P("$]("<\)RD*+2TM
 M(#8V,"PV-C8@+2TM+0H@( D):68@*"AV("8@*#$@/#P@*&8@+2 Q*2DI(#T]
 M(# I"B @"0D)8V]N=&EN=64["B @"0EB<" K/2!S;G!R:6YT9BAB<"P@<VEZ
 M96]F*&)U9BD@+2 H8G @+2 F8G5F6S!=*2P*(2 )"0D)"2(E8R4N*G,B+"!S
 M97 L("AI;G0I*&YP("T@8W I+"!C<"D["B @"0ES97 @/2 G+"<["B @"7T*
 M(" ):68@*'-E<" A/2 G/"<I"D]N;'D@:6X@+W5S<B]L;V-A;"]S<F,O8FEN
 M+V-H:6\Z(&-H:6\N;PHJ*BH@+W5S<B]S<F,O<WES+W-Y<R]C:&EO+F@)5'5E
 M($UA<B Q,2 Q,SHS.#HP,B Q.3DW"BTM+2!C:&EO+F@)36]N($9E8B @,B R
 M,#HQ-3HR," Q.3DX"BHJ*BHJ*BHJ*BHJ*BHJ*@HJ*BH@,34Q+#$U-B J*BHJ
 M"BTM+2 Q-3$L,34W("TM+2T*(" C9&5F:6YE($-(24]'4$E#2T52"5])3U(H
 M)V,G+" P># T+"!I;G0I"B @(V1E9FEN92!#2$E/4U!)0TM%4@E?24]7*"=C
 M)RP@,'@P-2P@:6YT*0H@("-D969I;F4@0TA)3T=005)!35,)7TE/4B@G8R<L
 M(#!X,#8L('-T<G5C="!C:&%N9V5R7W!A<F%M<RD**R C9&5F:6YE($-(24])
 M14Q%30D@7TE/*"=C)RP@,'@P-RD*(" C9&5F:6YE($-(24]'4U1!5%53"5])
 M3U<H)V,G+" P># X+"!S=')U8W0@8VAA;F=E<E]E;&5M96YT7W-T871U<RD*
 @(" *(" C96YD:68@+RH@(5]365-?0TA)3U](7R J+PH`
 `
 end
 
Responsible-Changed-From-To: freebsd-bugs->	 mikeh 
Responsible-Changed-By: mikeh 
Responsible-Changed-When: Wed Jun 13 19:17:05 PDT 2001 
Responsible-Changed-Why:  
I'll look at fixing parts of this that are still applicable. 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=5712 
State-Changed-From-To: open->feedback 
State-Changed-By: linimon 
State-Changed-When: Thu May 25 21:10:49 UTC 2006 
State-Changed-Why:  
To submmitter: is the patch in this PR still applicable? 


Responsible-Changed-From-To: mikeh->freebsd-bugs 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Thu May 25 21:10:49 UTC 2006 
Responsible-Changed-Why:  


http://www.freebsd.org/cgi/query-pr.cgi?pr=5712 
State-Changed-From-To: feedback->suspended 
State-Changed-By: linimon 
State-Changed-When: Sat Apr 19 17:34:46 UTC 2008 
State-Changed-Why:  
Feedback timeout from submitter.  I'll keep this around in case someone 
wants to give cpio some TLC at some point. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=5712 
>Unformatted:
