*BSD News Article 1631


Return to BSD News archive

Path: sserve!manuel!munnari.oz.au!mips!mips!swrinde!cs.utexas.edu!uunet!uunet.ca!cognos!dealwisb
From: dealwisb@cognos.com (Brian de Alwis)
Newsgroups: comp.unix.bsd
Subject: Core-names - patch, and a howto for more
Message-ID: <1992Jun22.025905.8717@cognos.com>
Date: 22 Jun 92 02:59:05 GMT
Organization: Cognos Incorporated, Ottawa CANADA
Lines: 74

Here's a minor patch for sys/kern/kern_sig.c for generation of core files.
As the file sits, the system will generate a core file using the full name
of the executable. So, if you dump core while running /bin/zsh, the kernel
tries to create a core "core./bin/sh", which is invalid, unless you have
a director core./. This patch will cause the basename to be used.

Also, more(1) (yes, I prefer it to less!) has another small bug when using
a repeat search (ie. /something, and then "n"), as the search() routine is
passed a NULL buffer, but search() doesn't keep the last regexp (a local var
called "s"). The solution is to remove the free(s) from the lower-part of 
search(), make s a static, and place the following near the beginning:

	if(buf) {       /* We want to search for something new */
		if(s)       /* We have the regexp from the last search ... */
	        free(s);       /* ... so get rid of it */
        s = regexp(buf)
    }

Sorry I don't have a diff, but I forgot to save a copy of the old code.

*** /sys/kern/kern_sig.c.old	Sun Jun 21 00:10:03 1992
--- /sys/kern/kern_sig.c	Sun Jun 21 17:15:42 1992
***************
*** 1009,1014 ****
--- 1009,1023 ----
  	/* NOTREACHED */
  }
  
+ char *rindex(s,c)
+ char *s,c;
+ {	char *r=(char *)NULL;
+ 	while(*s)
+ 	    if(*s++ == c)
+ 		r = s-1;
+ 	return(r);
+ }
+ 
  /*
   * Create a core dump.
   * The file name is "core.progname".
***************
*** 1025,1030 ****
--- 1034,1043 ----
  	int error, error1;
  	struct nameidata nd;
  	char name[MAXCOMLEN+6];	/* core.progname */
+ 	char *temp = rindex(p->p_comm,'/');
+ 
+ 	if(!temp++)
+ 		temp = p->p_comm;
  
  	if (pcred->p_svuid != pcred->p_ruid ||
  	    pcred->p_svgid != pcred->p_rgid)
***************
*** 1032,1038 ****
  	if (ctob(UPAGES + vm->vm_dsize + vm->vm_ssize) >=
  	    p->p_rlimit[RLIMIT_CORE].rlim_cur)
  		return (EFAULT);
! 	sprintf(name, "core.%s", p->p_comm);
  	nd.ni_dirp = name;
  	nd.ni_segflg = UIO_SYSSPACE;
  	if (error = vn_open(&nd, p, O_CREAT|FWRITE, 0644))
--- 1045,1051 ----
  	if (ctob(UPAGES + vm->vm_dsize + vm->vm_ssize) >=
  	    p->p_rlimit[RLIMIT_CORE].rlim_cur)
  		return (EFAULT);
! 	sprintf(name, "core.%s", temp);
  	nd.ni_dirp = name;
  	nd.ni_segflg = UIO_SYSSPACE;
  	if (error = vn_open(&nd, p, O_CREAT|FWRITE, 0644))
-- 
+++BdA  Brian de Alwis. Brain on loan to Cognos Inc, Ottawa, Ontario.
	dealwisb@cognos.com, or bsdealwis@napier.waterloo.edu
	"Nine out of ten men who tried camels said they preferred women"