[4045] in Athena Bugs

home help back first fref pref prev next nref lref last post

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);
      }
    /*

home help back first fref pref prev next nref lref last post