jik@PIT-MANAGER.MIT.EDU (Jonathan I. Kamens) (01/24/90)
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 <stdio.h> ! 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 <stdio.h> ! /* 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); } /*
jik@PIT-MANAGER.MIT.EDU (Jonathan I. Kamens) (01/25/90)
Date: Wed, 24 Jan 90 15:12:49 PST From: Mark D. Baushke <mdb@kosciusko.ESD.3Com.COM> The patch you posted is NOT against the 18.55 version of emacsclient.c . Your patch failed with two hunks rejected. I suggest you obtain a 'virgin' copy of dist-18.55/etc/emacsclient.c and create the patch again. You're right. Sorry about that, I assumed that the sources we were using At Project Athena were the most up-to-date. Silly assumption. Below is a patch to the version of emacsclient.c in the 18.55 distribution. Jonathan Kamens USnail: MIT Project Athena 11 Ashford Terrace jik@Athena.MIT.EDU Allston, MA 02134 Office: 617-253-8495 Home: 617-782-0710 ************************* *** /tmp/,RCSt1007578 Wed Jan 24 21:00:12 1990 --- emacsclient.c Wed Jan 24 20:54:24 1990 *************** *** 31,40 **** #if !defined(BSD) && !defined(HAVE_SYSVIPC) #include <stdio.h> ! 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 <stdio.h> ! /* 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); } *************** *** 57,68 **** struct sockaddr_un server; char *homedir, *cwd, *str; char string[BUFSIZ]; char *getenv (), *getwd (); if (argc < 2) { ! printf ("Usage: %s [filename]\n", argv[0]); exit (1); } --- 61,73 ---- struct sockaddr_un server; char *homedir, *cwd, *str; char string[BUFSIZ]; + char error_buf[BUFSIZ]; char *getenv (), *getwd (); if (argc < 2) { ! fprintf (stderr, "Usage: %s [filename]\n", argv[0]); exit (1); } *************** *** 72,96 **** if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0) { ! perror ("socket"); exit (1); } server.sun_family = AF_UNIX; if ((homedir = getenv ("HOME")) == NULL) { ! fprintf (stderr, "No home directory\n"); ! exit (1); } strcpy (server.sun_path, homedir); strcat (server.sun_path, "/.emacs_server"); if (connect (s, &server, strlen (server.sun_path) + 2) < 0) { ! perror ("connect"); exit (1); } if ((out = fdopen (s, "r+")) == NULL) { ! perror ("fdopen"); exit (1); } --- 77,104 ---- 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; if ((homedir = getenv ("HOME")) == NULL) { ! fprintf(stderr, "%s: No home directory\n", argv[0]); ! exit(1); } strcpy (server.sun_path, homedir); strcat (server.sun_path, "/.emacs_server"); if (connect (s, &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); } *************** *** 146,154 **** 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); } --- 154,164 ---- 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); } *************** *** 157,163 **** */ if ((homedir = getenv ("HOME")) == NULL) { ! fprintf (stderr,"No home directory\n"); exit (1); } strcpy (buf, homedir); --- 167,173 ---- */ if ((homedir = getenv ("HOME")) == NULL) { ! fprintf (stderr,"%s: No home directory\n", argv[0]); exit (1); } strcpy (buf, homedir); *************** *** 167,173 **** s = msgget (key, 0600); if (s == -1) { ! perror ("msgget"); exit (1); } --- 177,184 ---- s = msgget (key, 0600); if (s == -1) { ! (void) sprintf(error_buf, "%s: msgget", argv[0]); ! perror (error_buf); exit (1); } *************** *** 204,210 **** msgp->mtype = 1; if (msgsnd (s, msgp, strlen (msgp->mtext)+1, 1, 0) < 0) { ! perror ("msgsnd"); exit (1); } /* --- 215,222 ---- 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); } /*