X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/293f9f2a993099a5661e3f56ddbd55561d41454a..0925c80cd3d8f9a973d699fc1dbdbe79cca62988:/lib-src/emacsclient.c diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c index 3ae33f72a1..034d5c9faa 100644 --- a/lib-src/emacsclient.c +++ b/lib-src/emacsclient.c @@ -1,6 +1,6 @@ /* Client process that communicates with GNU Emacs acting as server. - Copyright (C) 1986, 1987, 1994, 1999, 2000, 2001, 2003, 2004 - Free Software Foundation, Inc. + Copyright (C) 1986, 1987, 1994, 1999, 2000, 2001, 2002, 2003, 2004, + 2005 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -16,8 +16,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. */ #define NO_SHORTNAMES @@ -42,10 +42,7 @@ Boston, MA 02111-1307, USA. */ #endif /* not VMS */ char *getenv (), *getwd (); -char *getcwd (); - -/* This is defined with -D from the compilation command, - which extracts it from ../lisp/version.el. */ +char *(getcwd) (); #ifndef VERSION #define VERSION "unspecified" @@ -92,6 +89,8 @@ decode_options (argc, argv) int argc; char **argv; { + alternate_editor = getenv ("ALTERNATE_EDITOR"); + while (1) { int opt = getopt_long (argc, argv, @@ -100,8 +99,6 @@ decode_options (argc, argv) if (opt == EOF) break; - alternate_editor = getenv ("ALTERNATE_EDITOR"); - switch (opt) { case 0: @@ -131,7 +128,7 @@ decode_options (argc, argv) case 'V': printf ("emacsclient %s\n", VERSION); - exit (0); + exit (EXIT_SUCCESS); break; case 'H': @@ -140,7 +137,7 @@ decode_options (argc, argv) default: fprintf (stderr, "Try `%s --help' for more information\n", progname); - exit (1); + exit (EXIT_FAILURE); break; } } @@ -166,7 +163,7 @@ The following OPTIONS are accepted:\n\ Editor to fallback to if the server is not running\n\ \n\ Report bugs to bug-gnu-emacs@gnu.org.\n", progname); - exit (0); + exit (EXIT_SUCCESS); } /* In NAME, insert a & before each &, each space, each newline, and @@ -206,7 +203,7 @@ quote_file_name (name, stream) } *q++ = 0; - fprintf (stream, copy); + fprintf (stream, "%s", copy); free (copy); } @@ -221,7 +218,7 @@ xmalloc (size) if (result == NULL) { perror ("malloc"); - exit (1); + exit (EXIT_FAILURE); } return result; } @@ -243,7 +240,7 @@ fail (argc, argv) } else { - exit (1); + exit (EXIT_FAILURE); } } @@ -299,8 +296,6 @@ main (argc, argv) int argc; char **argv; { - char *system_name; - int system_name_length; int s, i, needlf = 0; FILE *out, *in; struct sockaddr_un server; @@ -316,7 +311,7 @@ main (argc, argv) { fprintf (stderr, "%s: file name or argument required\n", progname); fprintf (stderr, "Try `%s --help' for more information\n", progname); - exit (1); + exit (EXIT_FAILURE); } /* @@ -332,40 +327,24 @@ main (argc, argv) server.sun_family = AF_UNIX; - { - char *dot; - system_name_length = 32; - - while (1) - { - system_name = (char *) xmalloc (system_name_length + 1); - - /* system_name must be null-terminated string. */ - system_name[system_name_length] = '\0'; - - if (gethostname (system_name, system_name_length) == 0) - break; - - free (system_name); - system_name_length *= 2; - } - - /* We always use the non-dotted host name, for simplicity. */ - dot = index (system_name, '.'); - if (dot) - *dot = '\0'; - } - { int sock_status = 0; int default_sock = !socket_name; int saved_errno; + char *server_name = "server"; + + if (socket_name && !index (socket_name, '/') && !index (socket_name, '\\')) + { /* socket_name is a file name component. */ + server_name = socket_name; + socket_name = NULL; + default_sock = 1; /* Try both UIDs. */ + } if (default_sock) { - socket_name = alloca (system_name_length + 100); - sprintf (socket_name, "/tmp/emacs%d-%s/server", - (int) geteuid (), system_name); + socket_name = alloca (100 + strlen (server_name)); + sprintf (socket_name, "/tmp/emacs%d/%s", + (int) geteuid (), server_name); } if (strlen (socket_name) < sizeof (server.sun_path)) @@ -374,7 +353,7 @@ main (argc, argv) { fprintf (stderr, "%s: socket-name %s too long", argv[0], socket_name); - exit (1); + exit (EXIT_FAILURE); } /* See if the socket exists, and if it's owned by us. */ @@ -399,8 +378,9 @@ main (argc, argv) if (pw && (pw->pw_uid != geteuid ())) { /* We're running under su, apparently. */ - sprintf (socket_name, "/tmp/emacs%d-%s/server", - (int) pw->pw_uid, system_name); + socket_name = alloca (100 + strlen (server_name)); + sprintf (socket_name, "/tmp/emacs%d/%s", + (int) pw->pw_uid, server_name); if (strlen (socket_name) < sizeof (server.sun_path)) strcpy (server.sun_path, socket_name); @@ -408,7 +388,7 @@ main (argc, argv) { fprintf (stderr, "%s: socket-name %s too long", argv[0], socket_name); - exit (1); + exit (EXIT_FAILURE); } sock_status = socket_status (server.sun_path); @@ -539,13 +519,13 @@ To start the server in Emacs, type \"M-x server-start\".\n", } fprintf (out, " "); } - + fprintf (out, "\n"); fflush (out); /* Maybe wait for an answer. */ if (nowait) - return 0; + return EXIT_SUCCESS; if (!eval) { @@ -567,7 +547,7 @@ To start the server in Emacs, type \"M-x server-start\".\n", printf ("\n"); fflush (stdout); - return 0; + return EXIT_SUCCESS; } #endif /* HAVE_SOCKETS */ @@ -589,3 +569,5 @@ strerror (errnum) /* arch-tag: f39bb9c4-73eb-477e-896d-50832e2ca9a7 (do not change this comment) */ + +/* emacsclient.c ends here */