Path: utzoo!utgpu!jarvis.csri.toronto.edu!cs.utexas.edu!tut.cis.ohio-state.edu!PIT-MANAGER.MIT.EDU!jik From: jik@PIT-MANAGER.MIT.EDU (Jonathan I. Kamens) Newsgroups: gnu.emacs.bug Subject: emacsclient.c Message-ID: <9001240949.AA05164@pit-manager.MIT.EDU> Date: 24 Jan 90 09:49:12 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 219 The error messages printed by the emacsclient program are rather lacking in useful information. For example, if the socket to connect to the emacs server does not exist, the error that is printed is "stat: no such file or directory" -- not even a program name is printed to give some idea of what program is having a problem. The patch below fixes this problem. Jonathan Kamens USnail: MIT Project Athena 11 Ashford Terrace jik@Athena.MIT.EDU Allston, MA 02134 Office: 617-253-8495 Home: 617-782-0710 ************************* *** /usr/athena/lib/gnuemacs/etc/emacsclient.c Fri Jun 2 13:01:58 1989 --- /tmp/emacsclient.c Wed Jan 24 04:29:36 1990 *************** *** 31,40 **** #if !defined(BSD) && !defined(HAVE_SYSVIPC) #include ! main () { ! fprintf (stderr, "Sorry, the Emacs server is supported only on Berkeley Unix\n"); ! fprintf (stderr, "or System V systems with IPC\n"); exit (1); } --- 31,44 ---- #if !defined(BSD) && !defined(HAVE_SYSVIPC) #include ! /* ARGSUSED */ ! main (argc, argv) ! int argc; ! char *argv[]; { ! fprintf (stderr, "%s: Sorry, the Emacs server is supported only\n", ! argv[0]); ! fprintf (stderr, "on Berkeley Unix or System V systems with IPC\n"); exit (1); } *************** *** 60,71 **** char string[BUFSIZ]; struct stat statbfr; extern gid_t geteuid(); char *getenv (), *getwd (); if (argc < 2) { ! printf ("Usage: %s [filename]\n", argv[0]); exit (1); } --- 64,76 ---- char string[BUFSIZ]; struct stat statbfr; extern gid_t geteuid(); + char error_buf[BUFSIZ]; char *getenv (), *getwd (); if (argc < 2) { ! fprintf (stderr, "Usage: %s [filename]\n", argv[0]); exit (1); } *************** *** 75,81 **** if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) { ! perror ("socket"); exit (1); } server.sun_family = AF_UNIX; --- 80,87 ---- if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) { ! (void) sprintf(error_buf, "%s: socket", argv[0]); ! perror (error_buf); exit (1); } server.sun_family = AF_UNIX; *************** *** 82,104 **** (void) sprintf (server.sun_path, "/tmp/esrv%d", geteuid()); if (stat (server.sun_path, &statbfr) == -1) { ! perror ("stat"); exit (1); } if (statbfr.st_uid != geteuid()) { ! fprintf (stderr, "Illegal socket owner\n"); exit (1); } if (connect (s, (struct sockaddr *)&server, strlen (server.sun_path) + 2) < 0) { ! perror ("connect"); exit (1); } if ((out = fdopen (s, "r+")) == NULL) { ! perror ("fdopen"); exit (1); } --- 88,113 ---- (void) sprintf (server.sun_path, "/tmp/esrv%d", geteuid()); if (stat (server.sun_path, &statbfr) == -1) { ! (void) sprintf(error_buf, "%s: %s", argv[0], server.sun_path); ! perror (error_buf); exit (1); } if (statbfr.st_uid != geteuid()) { ! fprintf (stderr, "%s: Illegal socket owner\n", argv[0]); exit (1); } if (connect (s, (struct sockaddr *)&server, strlen (server.sun_path) + 2) < 0) { ! (void) sprintf(error_buf, "%s: connect", argv[0]); ! perror (error_buf); exit (1); } if ((out = fdopen (s, "r+")) == NULL) { ! (void) sprintf(error_buf, "%s: fdopen", argv[0]); ! perror (error_buf); exit (1); } *************** *** 154,162 **** struct msqid_ds * msg_st; char *homedir, *getenv (), buf[BUFSIZ]; char *getwd (), *getcwd (), gwdirb[BUFSIZ], *cwd; if (argc < 2) { ! printf ("Usage: %s [filename]\n", argv[0]); exit (1); } --- 163,173 ---- struct msqid_ds * msg_st; char *homedir, *getenv (), buf[BUFSIZ]; char *getwd (), *getcwd (), gwdirb[BUFSIZ], *cwd; + char error_buf[BUFSIZ]; + if (argc < 2) { ! fprintf (stderr, "Usage: %s [filename]\n", argv[0]); exit (1); } *************** *** 165,171 **** */ if ((homedir = getenv ("HOME")) == NULL) { ! fprintf (stderr,"No home directory\n"); exit (1); } strcpy (buf, homedir); --- 176,182 ---- */ if ((homedir = getenv ("HOME")) == NULL) { ! fprintf (stderr,"%s: No home directory\n", argv[0]); exit (1); } strcpy (buf, homedir); *************** *** 175,181 **** s = msgget (key, 0600); if (s == -1) { ! perror ("msgget"); exit (1); } --- 186,193 ---- s = msgget (key, 0600); if (s == -1) { ! (void) sprintf(error_buf, "%s: msgget", argv[0]); ! perror (error_buf); exit (1); } *************** *** 212,218 **** msgp->mtype = 1; if (msgsnd (s, msgp, strlen (msgp->mtext)+1, 1, 0) < 0) { ! perror ("msgsnd"); exit (1); } /* --- 224,231 ---- msgp->mtype = 1; if (msgsnd (s, msgp, strlen (msgp->mtext)+1, 1, 0) < 0) { ! (void) sprintf(error_buf, "%s: msgsnd", argv[0]); ! perror (error_buf); exit (1); } /*