Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Mar 2000 17:55:54 -0800 (PST)
From:      ginga@athena.club.ne.jp
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/17257: fix for dired core dump of japanese/ng port.
Message-ID:  <200003080155.RAA08498@freefall.freebsd.org>

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

>Number:         17257
>Category:       ports
>Synopsis:       fix for dired core dump of japanese/ng port.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Mar  7 18:00:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Kawaguti, Ginga
>Release:        3.[134]R
>Organization:
NTT SI Labs.
>Environment:
FreeBSD guges.silab.ecl.ntt.co.jp 3.1-RELEASE FreeBSD 3.1-RELEASE #7: Wed Sep 29 17:17:31 JST 1999     root@guges.silab.ecl.ntt.co.jp:/usr/src/sys/compile/GUGES  i386

>Description:
ports: japanese/ng(light emacs clone editor) has "dired" mode,
but it's quite unstable.
With this fix, it seems to be more stable.

BTW, my mail address in ports tree
	japanese/ng/Makefile 
	japanese/kappa20/Makefile
is not valid anymore(the one at the "Whom:" line).

please modify it:
	ginga@athena.club.OR.jp ==> ginga@athena.club.NE.jp
                          !!                          !!

Thank you.

---------------------------- below is the new japanese/ng/patch/patch-aa:
diff -ur Ng-1.3L.orig/complt.c ./complt.c
--- Ng-1.3L.orig/complt.c	Mon Jun 14 09:31:36 1993
+++ ./complt.c	Sun Mar  5 11:41:39 2000
@@ -10,10 +10,17 @@
 #include    "complt.h"
 #define    LIST_COL    35
 
+#ifndef __FreeBSD__
 BUFFER    *bp = NULL;
 BUFFER    *prev_bp = NULL;
 WINDOW    *prev_wp = NULL;
 WINDOW    prev_window;
+#else
+static BUFFER    *bp = NULL;
+static BUFFER    *prev_bp = NULL;
+static WINDOW    *prev_wp = NULL;
+static WINDOW    prev_window;
+#endif /* __FreeBSD__ */
 
 /*
  * do some completion.
@@ -24,9 +31,15 @@
     int    flags;
 {
     int    res;
+#ifndef __FreeBSD__
     int    complete_funcname ();
     int    complete_buffername ();
     int    complete_filename ();
+#else
+    static int    complete_funcname ();
+    static int    complete_buffername ();
+    static int    complete_filename ();
+#endif /* __FreeBSD__ */
 
     switch (flags & (EFFUNC | EFBUF | EFFILE))
       {
@@ -256,9 +269,15 @@
     int    cur_row;
     int    cur_col;
     WINDOW    *wp;
+#ifndef __FreeBSD__
     int    complete_list_funcnames ();
     int    complete_list_buffernames ();
     int    complete_list_filenames ();
+#else
+    static int    complete_list_funcnames ();
+    static int    complete_list_buffernames ();
+    static int    complete_list_filenames ();
+#endif /* __FreeBSD__ */
 
     if ((bp = bfind ("*Completions*", TRUE)) == NULL)
       return (FALSE);
diff -ur Ng-1.3L.orig/echo.c ./echo.c
--- Ng-1.3L.orig/echo.c	Mon Jun 14 09:31:38 1993
+++ ./echo.c	Sun Mar  5 11:41:39 2000
@@ -192,8 +192,13 @@
 {
     int    cpos;
     int    c;
-     int    veread_del_char ();
-     int    veread_complete ();
+#ifndef __FreeBSD__
+    int  veread_del_char ();
+    int  veread_complete ();
+#else
+    static int	veread_del_char(char *, int);
+    static int	veread_complete(char *, int, int, int);
+#endif /* __FreeBSD__ */
 
 #ifdef	ADDFUNC	/* 91.01.16  by S.Yoshida */
     /* If an extra argument exists, use it.			*/
diff -ur Ng-1.3L.orig/extend.c ./extend.c
--- Ng-1.3L.orig/extend.c	Mon Jun 14 09:31:39 1993
+++ ./extend.c	Sun Mar  5 11:41:39 2000
@@ -96,7 +96,11 @@
 	KEYMAP	*mp;
 	PF	*pfp;
 	MAP_ELEMENT *mep;
+#ifndef __FreeBSD__
 	KEYMAP	*realocmap();	/* 90.03.23  delete "static" by A.Shirahashi */
+#else
+	static KEYMAP	*realocmap(KEYMAP *);
+#endif /* __FreeBSD__ */
 
 	if(ele >= &curmap->map_element[curmap->map_num] || c < ele->k_base) {
 	    if(ele > &curmap->map_element[0] && (funct!=prefix ||
@@ -247,7 +251,11 @@
 {
     register KEYMAP *mp;
     register int i;
+#ifndef __FreeBSD__
     VOID fixmap();	/* 90.03.23  delete "static" by A.Shirahashi */
+#else
+    static VOID fixmap(KEYMAP *,KEYMAP *,KEYMAP *);
+#endif /* __FreeBSD__ */
     extern int nmaps;
 
     if((mp = (KEYMAP *)malloc((unsigned)(sizeof(KEYMAP)+
@@ -607,8 +615,13 @@
 #endif
 	PF	name_function();
 	LINE	*lalloc();
+#ifndef __FreeBSD__
 	char	*skipwhite(), *parsetoken();	/* 90.03.23  delete "static" */
 						/*           by A.Shirahashi */
+#else
+	static char *skipwhite(char *);
+	static char *parsetoken(char *);
+#endif /* __FreeBSD__ */
 
 	if(macrodef || inmacro) {
 		ewprintf("Not now!");
diff -ur Ng-1.3L.orig/kinit.h ./kinit.h
--- Ng-1.3L.orig/kinit.h	Mon Jun 14 09:31:40 1993
+++ ./kinit.h	Sun Mar  5 11:42:20 2000
@@ -32,14 +32,14 @@
 
 /*	'@'	Select JIS-78 [ESC-$-@].	*/
 /*	'B'	Select JIS-83 [ESC-$-B].	*/
-#define	TO_KFIO		'@'		/* to-kanji-fileio		*/
-#define	TO_KDISPLAY	'@'		/* to-kanji-display		*/
+#define	TO_KFIO		'B'		/* to-kanji-fileio		*/
+#define	TO_KDISPLAY	'B'		/* to-kanji-display		*/
 
 /*	'B'	Select ASCII		     [ESC-(-B].	*/
 /*	'J'	Select JIS-ROMAJI	     [ESC-(-J].	*/
 /*	'H'	Illegal selection, but used. [ESC-(-H].	*/
-#define	TO_AFIO		'J'		/* to-ascii-fileio		*/
-#define	TO_ADISPLAY	'J'		/* to-ascii-display		*/
+#define	TO_AFIO		'B'		/* to-ascii-fileio		*/
+#define	TO_ADISPLAY	'B'		/* to-ascii-display		*/
 
 #ifdef  HANKANA  /* 92.11.21  by S.Sasaki */
 /*	'7'	Use SI/SO for KATAKANA	     [SI / SO]	*/
diff -ur Ng-1.3L.orig/sys/bsd/fileio.c ./sys/bsd/fileio.c
--- Ng-1.3L.orig/sys/bsd/fileio.c	Wed Feb 13 13:05:02 1991
+++ ./sys/bsd/fileio.c	Sun Mar  5 11:42:04 2000
@@ -6,6 +6,10 @@
 #include	"config.h"	/* 90.12.20  by S.Yoshida */
 #include	"def.h"
 
+#ifdef __FreeBSD__
+#include	<string.h>
+#endif /* __FreeBSD__ */
+
 static	FILE	*ffp;
 extern	char	*getenv(), *strncpy();
 char	*adjustname();
@@ -384,7 +388,11 @@
 {
     int pid;
     char *eargv[3];
+#ifndef __FreeBSD__
     union wait status;
+#else
+    int status;
+#endif /* __FreeBSD__ */
 
 #ifdef	BUGFIX	/* 91.01.11  by Y.Kaneko */
     if((pid = vfork()) == 0) {
@@ -403,7 +411,11 @@
     if(pid == -1)	return	-1;
 #endif	/* BUGFIX */
     while(wait(&status) != pid) {}
+#ifndef __FreeBSD__
     return status.w_status == 0;
+#else
+    return status == 0;
+#endif /* __FreeBSD__ */
 }
 
 BUFFER *dired_(dirname)
@@ -461,12 +473,35 @@
 register char *fn;
 {
     register char *cp;
+#ifndef __FreeBSD__
 
     if(llength(lp) <= 47) return ABORT;
     (VOID) strcpy(fn, curbp->b_fname);
     cp = fn + strlen(fn);
     bcopy(&lp->l_text[47], cp, llength(lp) - 47);
     cp[llength(lp) - 47] = '\0';
+#else
+    register int sepidx, duplen;
+
+    if(llength(lp) < 47) return ABORT;
+    cp = &lp->l_text[llength(lp)];
+    while (*--cp != ' ') ;
+    sepidx = (cp - lp->l_text) + 1;
+
+    if ( lgetc(lp, 2) == 'l' && strncmp(cp - 3, " -> " ,4) == 0 ) {
+	duplen = sepidx-4;
+	strncpy(fn, lp->l_text, duplen);
+	fn[duplen] = '\0';
+	sepidx = (strrchr(fn, ' ') - fn) + 1;
+	duplen = duplen - sepidx;
+    }
+    else duplen = llength(lp) - sepidx;
+
+    (VOID) strcpy(fn, curbp->b_fname);
+    cp = fn + strlen(fn);
+    bcopy(&lp->l_text[sepidx], cp, duplen);
+    cp[duplen] = '\0';
+#endif
     return lgetc(lp, 2) == 'd';
 }
 #endif
diff -ur Ng-1.3L.orig/sys/bsd/spawn.c ./sys/bsd/spawn.c
--- Ng-1.3L.orig/sys/bsd/spawn.c	Wed Feb 13 13:01:41 1991
+++ ./sys/bsd/spawn.c	Sun Mar  5 11:41:39 2000
@@ -39,13 +39,27 @@
  */
 /*ARGSUSED*/
 spawncli(f, n) {
+#ifndef __FreeBSD__
 	register int	pid, wpid, (*oqsig)(), (*oisig)(), omask;
+#else
+	register int	omask;
+	register pid_t	pid, wpid;
+	register sig_t	oqsig, oisig;
+#endif /* __FreeBSD__ */
 #ifdef	ADDFUNC		/* 90.02.14  by S.Yoshida */
 #ifdef	SIGWINCH	/* 90.02.14  by S.Yoshida */
+#ifndef __FreeBSD__
 	register int	(*owsig)();
+#else
+	register sig_t	owsig;
+#endif /* __FreeBSD__ */
 #endif	/* SIGWINCH */
 #endif	/* ADDFUNC */
+#ifndef __FreeBSD__
 	union wait	status;
+#else
+	int	status;
+#endif /* __FreeBSD__ */
 
 	if (shellp == NULL) {
 		shellp = getenv("SHELL");
@@ -141,8 +155,15 @@
 	char *tmp;
 	int ostdin, ostdout, ostderr, in, out, s;
 	extern char *mktemp();
+#ifdef __FreeBSD__
+	static char tmpfile[] = "/tmp/ngXXXXXX";
+#endif /* __FreeBSD__ */
 
+#ifndef __FreeBSD__
 	if ((tmp = mktemp("/tmp/ngXXXXXX")) == NULL)
+#else
+	if ((tmp = mktemp(tmpfile)) == NULL)
+#endif /* __FreeBSD__ */
 		return NULL;
 	if ((in = open(input ? input : "/dev/null", 0)) < 0)
 		return NULL;
diff -ur Ng-1.3L.orig/sys/bsd/ttyio.c ./sys/bsd/ttyio.c
--- Ng-1.3L.orig/sys/bsd/ttyio.c	Wed Feb 13 13:02:01 1991
+++ ./sys/bsd/ttyio.c	Sun Mar  5 11:41:39 2000
@@ -32,7 +32,11 @@
 int	ncol;				/* Terminal size, columns.	*/
 #ifdef	ADDFUNC		/* 90.02.14  by S.Yoshida */
 #ifdef	SIGWINCH	/* 90.02.13  by S.Yoshida */
+#ifndef __FreeBSD__
 int	ttwinch();
+#else
+void	ttwinch();
+#endif /* __FreeBSD__ */
 #endif	/* SIGWINCH */
 #endif	/* ADDFUNC */
 
@@ -46,7 +50,9 @@
 ttopen() {
 	register char *tv_stype;
 	char *getenv(), *tgetstr(), tcbuf[1024], err_str[72];
+#ifndef __FreeBSD__
 	char *sprintf();
+#endif /* __FreeBSD__ */
 
 /* do this the REAL way */
 	if ((tv_stype = getenv("TERM")) == NULL)
@@ -256,7 +262,11 @@
 /*
  * Signal handler when window size has changed.
  */
+#ifndef __FreeBSD__
 ttwinch()
+#else
+void ttwinch()
+#endif /* __FreeBSD__ */
 {
 	refresh(FFRAND, 0);			/* Very easy way... */
 }

>How-To-Repeat:
I'm not sure, but it seems to happen with 
"STRANGE" file names, and with repeated use with dired.

>Fix:
change the japanese/ng port's patch/patch-aa to the 
one attatched in "Full Description".


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


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-ports" in the body of the message




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