From: arumble@extro.ucc.su.OZ.AU (Anthony Rumble) Subject: Re: Seyon, PATCH FOR SEYON1.0 Date: Sat, 21 Nov 1992 02:20:51 GMT
kranz@cs.tulane.edu (Barry Kranz) writes:
>Although I have been able to compile the X app Seyon, everytime I
>execute it I get a "killed by signal 11" error, has anyone gotten
>this to work?
>Any help would be greatly appreciated!
Yes.. While fixing the LOCKFILE stuff, I found a MAJOR
bug/nasty.. He should be rapped over the knuckles
for this one..
Basically, he did something like
lckf[40] = LOCKFILE; (LOCKFILE being "/usr/spool/uucp/LCK.."
Which is illegal.
Here is a patch that fixes that bug and implementes CORRECT
lock files...
======== Cut here =======
diff +show-c-function +new-file seyon/Makefile seyon-1.0//Makefile
*** seyon/Makefile Sat Nov 21 04:15:21 1992
--- seyon-1.0//Makefile Mon Nov 16 04:44:29 1992
*************** DEFS = -DHELPFILE=$(HELPFILE)
*** 43,49 ****
LIBS = -lXaw -lXmu -lXt -lX11
OBJS = Seyon.o SeTerm.o xcsubs.o SePort.o \
xcscrpt.o SeMain.o SeWin.o SeSubs.o SeHelp.o SeSet.o \
! SeDial.o SeTrans.o SeMisc.o lockfile.o
.c.o:; $(CC) $(CFLAGS) -c $<
all:: seyon-cmd seyon
--- 43,49 ----
LIBS = -lXaw -lXmu -lXt -lX11
OBJS = Seyon.o SeTerm.o xcsubs.o SePort.o \
xcscrpt.o SeMain.o SeWin.o SeSubs.o SeHelp.o SeSet.o \
! SeDial.o SeTrans.o SeMisc.o
.c.o:; $(CC) $(CFLAGS) -c $<
all:: seyon-cmd seyon
diff +show-c-function +new-file seyon/SePort.c seyon-1.0//SePort.c
*** seyon/SePort.c Sat Nov 21 14:27:18 1992
--- seyon-1.0//SePort.c Mon Nov 16 10:14:41 1992
***************
*** 27,33 ****
#include "seyon.h"
#include "SeDecl.h"
- #include "lockfile.h"
/*
The dial() routine uses these two defines.
--- 27,32 ----
*************** send_slowly(s)
*** 427,449 ****
Simple, eh?
*/
lock_tty()
{
! char lckf[40];
! int tmp;
char *modemname;
! strcpy(lckf, LOCKFILE);
modemname = strrchr(port, '/');
strcat(lckf, (modemname ? (modemname+1) : port));
! tmp = makelock(lckf);
! if (tmp)
! return 0;
}
unlock_tty()
{
! rmlocks();
}
--- 426,500 ----
Simple, eh?
*/
+ char lckf[40] = LOCKFILE;
+ char ltmp[40] = LTMPFILE;
lock_tty()
{
! int pid, lckpid, lfd;
! char pidstr[20];
! char lckpidstr[20];
char *modemname;
+ extern int errno;
! /*
! * Get our PID, and initialize the filename strings.
! */
! pid = getpid();
! sprintf(pidstr, "%d", pid);
modemname = strrchr(port, '/');
strcat(lckf, (modemname ? (modemname+1) : port));
! strcat(ltmp, pidstr);
! /*
! * Create the LTMP.<pid> file and scribble our PID in it.
! */
! unlink(ltmp);
! if ((lfd = creat(ltmp, 0444)) == -1) {
! fprintf(stderr, "Can't creat(2) LTMP file in %s\r\n", LTMPFILE);
! return -1;
! }
! sprintf(pidstr, "%10d\n", pid);
! write(lfd, pidstr, 11);
! close(lfd);
!
! /*
! * Attempt to link directly - if it works, we're done.
! */
! relink:
! if (link(ltmp, lckf) == 0) {
! unlink(ltmp);
! return 0;
! }
!
! /*
! * Oh, bother, there's a LCK..* file already; we must
! * now expend effort to learn if it's stale or not.
! */
! if ((lfd = open(lckf, O_RDONLY)) != -1) {
! if (read(lfd, lckpidstr, 11) == 11) {
! lckpid = atol(lckpidstr);
! if (kill(lckpid, 0) == 0) {
! fprintf(stderr, "%s locked by process %d.\r\n", port, lckpid);
! unlink(ltmp);
! return -1;
! }
! }
! }
!
! /*
! * The LCK..* file was stale. Remove and retry.
! */
! if (unlink(lckf)) {
! fprintf(stderr, "Can't unlink(2) stale LCK?\r\n");
! unlink(ltmp);
! return -1;
! }
! goto relink;
! /*NOTREACHED*/
}
unlock_tty()
{
! unlink(lckf);
}
diff +show-c-function +new-file seyon/lockfile.c seyon-1.0//lockfile.c
*** seyon/lockfile.c Sat Nov 21 04:10:59 1992
--- seyon-1.0//lockfile.c
***************
*** 1,182 ****
- /*************************************************************************
- General UUCP Lock file Code (For NIXMAIL)
- --------------------------------------------------------------------------
- Copyright (c) 1992 Anthony Rumble
- --------------------------------------------------------------------------
- RCS Info
-
- $Header: /home/smilie/emsi/RCS/lockfile.c,v 1.7 1992/10/18 07:57:51 smilie Exp $
-
- $Log: lockfile.c,v $
- * Revision 1.7 1992/10/18 07:57:51 smilie
- * added rmlock
- *
- * Revision 1.6 1992/10/16 08:58:01 smilie
- * updated for nixmail
- *
- * Revision 1.5 1992/10/10 05:58:36 smilie
- * took out atexit
- *
- * Revision 1.4 1992/10/09 13:36:46 smilie
- * fixed some warnings
- *
- * Revision 1.3 1992/10/09 13:05:45 smilie
- * fixed a bug with the kill return
- *
- * Revision 1.2 1992/10/09 12:56:02 smilie
- * fixed an debug message up
- *
- * Revision 1.1 1992/10/09 09:57:26 smilie
- * Initial revision
- *
-
- *************************************************************************/
-
- /* Feature test switches */
- #define _POSIX_SOURCE 1
- #define _LOCKFILE_C
-
- /* System Headers */
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/types.h>
- #include <unistd.h>
- #include <signal.h>
- #include <string.h>
-
- /* Local Headers */
- #include "lockfile.h"
-
- /* Macros */
-
- /* File scope variables */
-
- static char lockfile_rcsid[] = "$Id: lockfile.c,v 1.7 1992/10/18 07:57:51 smilie Exp $";
- #define RCSID lockfile_rcsid
-
- /* External variables */
-
- char lock[256]; /* Store the current lockfile */
-
- /* External Functions */
-
- /* Structures and unions */
-
- /* Functions */
-
- /************************************************************************
- RMLOCKS
- -------------------------------------------------------------------------
- Remove the current UUCP locks
- *************************************************************************/
- void rmlocks(void)
- {
- (void)unlink(lock);
- }
- /************************************************************************
- RMLOCK
- -------------------------------------------------------------------------
- *************************************************************************/
- void rmlock(char *s)
- {
- (void)unlink(s);
- }
- /************************************************************************
- READLOCK
- -------------------------------------------------------------------------
- Read the PID from a lockfile, return -1 if there is no
- valid lockfile
- *************************************************************************/
- pid_t readlock(char *name)
- {
- pid_t pid;
- FILE *fh;
- /**/
-
- if ((fh = fopen(name, "rb")) == NULL) /* Open the lockfile */
- {
- #ifdef DEBUG
- fprintf(stderr, "readlock: %s : %s\n", name, strerror(errno));
- #endif
- return -1; /* No lockfile exists */
- }
-
- (void)fread(&pid, sizeof(pid), 1, fh); /* Read in PID */
- (void)fclose(fh);
- return pid;
- }
- /************************************************************************
- CHECKLOCK
- -------------------------------------------------------------------------
- Check the current lock, return TRUE if a valid lock exists
- return FALSE if there is no valid lock
-
- Pass the full path and filename of the lockfile to name
- *************************************************************************/
- int checklock(char *name)
- {
- pid_t pid; /* PID Variable */
- /**/
-
- pid = readlock(name); /* Read in PID */
- if (pid == -1)
- {
- #ifdef DEBUG
- (void)fprintf(stderr, "checklock: no valid lockfile exists\n");
- #endif
- return FALSE;
- }
-
- if (kill(pid, 0) == -1) /* See if the PID actually exists */
- {
- if (errno == ESRCH)
- {
- #ifdef DEBUG
- (void)fprintf(stderr, "checklock: PID '%u' does not exist, removing lockfile\n", pid);
- #endif
- (void)unlink(name); /* Remove lock file as there is no such PID */
- return FALSE;
- }
- (void)fprintf(stderr, "checklock: Unknown KILL return '%u'\n", errno);
- return FALSE;
- }
-
- return TRUE; /* A valid lockfile was found */
- }
- /************************************************************************
- MAKELOCK
- -------------------------------------------------------------------------
- Will creat the lockfile 'name' if there is not a valid lockfile
- under this name.
- *************************************************************************/
- int makelock(char *name)
- {
- FILE *fh;
- pid_t pid;
- /**/
-
- if (checklock(name))
- {
- (void)fprintf(stderr, "makelock: Error, Valid lock file exists\n");
- return FALSE;
- }
-
- pid = getpid(); /* Get current PID */
-
- if ((fh = fopen(name, "wb")) == NULL)
- {
- (void)fprintf(stderr, "Error creating lockfile '%s'\n", name);
- return FALSE;
- }
-
- (void)fwrite(&pid, sizeof(pid), 1, fh); /* Write PID */
- (void)fclose(fh);
- #ifdef DEBUG
- (void)fprintf(stderr, "makelock: lock made\n");
- #endif
- (void)strcpy(lock, name); /* set global lock file */
- return TRUE;
- }
-
-
-
--- 0 ----
diff +show-c-function +new-file seyon/lockfile.h seyon-1.0//lockfile.h
*** seyon/lockfile.h Sat Nov 21 04:10:03 1992
--- seyon-1.0//lockfile.h
***************
*** 1,36 ****
- /*************************************************************************
- GENERAL Lockfile header file
- --------------------------------------------------------------------------
- Copyright (c) 1992 Anthony Rumble
- --------------------------------------------------------------------------
- RCS Info
-
- $Header: /home/smilie/emsi/RCS/lockfile.h,v 1.1 1992/10/09 13:19:00 smilie Exp $
-
- $Log: lockfile.h,v $
- * Revision 1.1 1992/10/09 13:19:00 smilie
- * Initial revision
- *
-
- $Id: lockfile.h,v 1.1 1992/10/09 13:19:00 smilie Exp $
-
- *************************************************************************/
- #ifndef _LOCKFILE_H
- #define _LOCKFILE_H
-
- #include <sys/types.h>
-
- extern char lock[256]; /* lock file name */
-
- extern void rmlocks(void); /* remove lock file */
- extern pid_t readlock(char *); /* read a lock file */
- extern int checklock(char *); /* check a lock file */
- extern int makelock(char *); /* make a lock file */
-
- #ifndef TRUE
- #define TRUE 1
- #define FALSE 0
- #endif
-
- #endif
-
--- 0 ----
Common subdirectories: seyon/xcomm_docs and seyon-1.0//xcomm_docs
-- Anthony Rumble aka SmilieZ "Anything is possible.. If there is enuf money in it"