Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 25 Mar 1996 14:36:56 -0500 (EST)
From:      "Marc G. Fournier" <scrappy@ki.net>
To:        current@freebsd.org
Subject:   PATCH: /usr/src/sys/miscfs/devfs/devfs_tree.c
Message-ID:  <Pine.BSF.3.91.960325142921.10448G-100000@ki.net>

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


Hi...

	Can someone commit the patch that follows?  

	The patch fixes a problem with devfs_add_devswf() in which a
device isn't being created properly if it involves a subdirectory.

	At the end of this email, is an example of what the current code
does and what the patch produces.

	Thanks...

*** /usr/src.orig/sys/miscfs/devfs/devfs_tree.c	Sun Feb 18 04:43:44 1996
--- miscfs/devfs/devfs_tree.c	Fri Mar 22 14:09:15 1996
***************
*** 910,916 ****
  		...)
  {
  	va_list ap;
! 	char *p, *q, buf[256]; /* XXX */
  	int i;
  
  	va_start(ap, fmt);
--- 910,916 ----
  		...)
  {
  	va_list ap;
! 	char *p, buf[256]; /* XXX */
  	int i;
  
  	va_start(ap, fmt);
***************
*** 918,929 ****
  	va_end(ap);
  	buf[i] = '\0';
  	p = NULL;
- 	for (q=buf; *q == '/'; q++)
- 		continue;
  
! 	for (i=0; q[i]; i++)
! 		if (q[i] == '/')
! 			p = q;
  
  	if (p) {
  		*p++ = '\0';
--- 918,930 ----
  	va_end(ap);
  	buf[i] = '\0';
  	p = NULL;
  
! 	for(i=strlen(buf); i>0; i--)
! 		if(buf[i] == '/') {
! 			p=&buf[i];
! 			buf[i]=0;
! 			break;
! 		}
  
  	if (p) {
  		*p++ = '\0';

-----[ CUT HERE ]-----

	main1.c is a standalone program using the algorithm used in
the original devfs_add_devswf(), while main.c is a standalone program using
the modified devfs_add_devswf().  Both are trying to create a device of
"/fd/0", as is used in /usr/src/sys/kern/kern_descrip.c.  What should happen
is a device named 0 should be created in /fd, but the current code tries
to create a device named 'd/0' in /


Script started on Mon Mar 25 14:33:36 1996
> cat main1.c
#include <stdio.h>

main()
{
	char buf[20], *p, *q;
	int i;

	strcpy(buf, "/fd/0");
	printf("buf = %s\n\n", buf);

        p = NULL;
        for (q=buf; *q == '/'; q++)
                continue;

        for (i=0; q[i]; i++)
                if (q[i] == '/')
                        p = q;

	if(p) {
		*p++ = '\0';
		printf("buf = %s\np = %s\n\n", buf, p);
	}
	else
		printf("buf = %s\np is NULL\n\n", buf);

} 
> ./main1
buf = /fd/0

buf = /
p = d/0

> cat main.c
#include <stdio.h>

main()
{
	char buf[20], *p;
	int i;

	strcpy(buf, "/fd/0");
	printf("buf = %s\n\n", buf);

	p = NULL;

	for(i = strlen(buf); i >= 0; i--) 
		if(buf[i] == '/') {
			p = &buf[i];
			buf[i] = 0;
			break;
		}

	if(p) {
		*p++ = '\0';
		printf("buf = %s\np = %s\n\n", buf, p);
	}
	else
		printf("buf = %s\np is NULL\n\n", buf);

}
> ./main
buf = /fd/0

buf = /fd
p = 0

> exit
exit

Script done on Mon Mar 25 14:33:45 1996

Marc G. Fournier | POP Mail  Telnet Acct  DNS Hosting
System           |  WWW Services   Database Services  | Knowledge, 
  Administrator  |                                    | Information and
 scrappy@ki.net  |      WWW: http://www.ki.net        | Communications, Inc




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.3.91.960325142921.10448G-100000>