[4045] in Athena Bugs
emacsclient.c
daemon@ATHENA.MIT.EDU (Jonathan I. Kamens)
Wed Jan 24 04:49:57 1990
Date: Wed, 24 Jan 90 04:49:12 -0500
From: Jonathan I. Kamens <jik@PIT-MANAGER.MIT.EDU>
To: bugs@ATHENA.MIT.EDU, bug-emacs@AI.MIT.EDU
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);
}
/*