emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: extensions for emacsclient (CVS version)


From: Richard Stallman
Subject: Re: extensions for emacsclient (CVS version)
Date: Thu, 11 Sep 2003 09:16:38 -0400

This change would be good, but it has a bug: if the argument
is too long, the sprintf will clobber something.

Here's a version that fixes that problem in a clean way.
Does it work?


cd ~/emacs/lib-src/
diff -c /home/rms/emacs/lib-src/emacsclient.c.\~1\~ 
/home/rms/emacs/lib-src/emacsclient.c
***************
*** 67,72 ****
--- 67,75 ----
     is not running.  --alternate-editor.   */
  const char * alternate_editor = NULL;
  
+ /* If non-NULL, thefilename of the UNIX socket */
+ char *socket_name = NULL;
+ 
  void print_help_and_exit ();
  
  struct option longopts[] =
***************
*** 76,81 ****
--- 79,85 ----
    { "help",   no_argument,       NULL, 'H' },
    { "version",        no_argument,       NULL, 'V' },
    { "alternate-editor", required_argument, NULL, 'a' },
+   { "socket-name",    required_argument, NULL, 's' },
    { "display",        required_argument, NULL, 'd' },
    { 0, 0, 0, 0 }
  };
***************
*** 91,97 ****
    while (1)
      {
        int opt = getopt_long (argc, argv,
!                            "VHnea:d:", longopts, 0);
  
        if (opt == EOF)
        break;
--- 95,101 ----
    while (1)
      {
        int opt = getopt_long (argc, argv,
!                            "VHnea:s:d:", longopts, 0);
  
        if (opt == EOF)
        break;
***************
*** 109,114 ****
--- 113,122 ----
          alternate_editor = optarg;
          break;
  
+       case 's':
+         socket_name = optarg;
+         break;
+ 
        case 'd':
          display = optarg;
          break;
***************
*** 136,155 ****
  void
  print_help_and_exit ()
  {
!   fprintf (stderr,
!          "Usage: %s [OPTIONS] FILE...\n\
  Tell the Emacs server to visit the specified files.\n\
  Every FILE can be either just a FILENAME or [+LINE[:COLUMN]] FILENAME.\n\
  The following OPTIONS are accepted:\n\
  -V, --version           Just print a version info and return\n\
  -H, --help              Print this usage information message\n\
  -n, --no-wait           Don't wait for the server to return\n\
  -e, --eval              Evaluate the FILE arguments as ELisp expressions\n\
  -d, --display=DISPLAY   Visit the file in the given display\n\
  -a, --alternate-editor=EDITOR\n\
                          Editor to fallback to if the server is not running\n\
  Report bugs to address@hidden", progname);
!   exit (1);
  }
  
  /* Return a copy of NAME, inserting a &
--- 149,172 ----
  void
  print_help_and_exit ()
  {
!   printf (
!         "Usage: %s [OPTIONS] FILE...\n\
  Tell the Emacs server to visit the specified files.\n\
  Every FILE can be either just a FILENAME or [+LINE[:COLUMN]] FILENAME.\n\
+ \n\
  The following OPTIONS are accepted:\n\
  -V, --version           Just print a version info and return\n\
  -H, --help              Print this usage information message\n\
  -n, --no-wait           Don't wait for the server to return\n\
  -e, --eval              Evaluate the FILE arguments as ELisp expressions\n\
  -d, --display=DISPLAY   Visit the file in the given display\n\
+ -s, --socket-name=FILENAME\n\
+                         Set the filename of the UNIX socket for 
communication\n\
  -a, --alternate-editor=EDITOR\n\
                          Editor to fallback to if the server is not running\n\
+ \n\
  Report bugs to address@hidden", progname);
!   exit (0);
  }
  
  /* Return a copy of NAME, inserting a &
***************
*** 336,342 ****
    {
      int sock_status = 0;
  
!     sprintf (server.sun_path, "/tmp/esrv%d-%s", (int) geteuid (), 
system_name);
  
      /* See if the socket exists, and if it's owned by us. */
      sock_status = socket_status (server.sun_path);
--- 357,374 ----
    {
      int sock_status = 0;
  
!     if (! socket_name)
!       {
!       socket_name = alloca (system_name_length + 100);
!       sprintf (socket_name, "/tmp/emacs%d-%s/server",
!                (int) geteuid (), system_name);
!       }
! 
!     if (strlen (socket_name) < sizeof (server.sun_path))
!       strcpy (server.sun_path, socket_name);
!     else
!       fprintf (stderr, "%s: socket-name %s too long",
!              argv[0], socket_name);
  
      /* See if the socket exists, and if it's owned by us. */
      sock_status = socket_status (server.sun_path);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]