annotate lib-src/emacsserver.c @ 35362:f6b85f5a5397

(isearch-highlight): Set isearch-overlay priority to 1 here rather than each time through isearch-lazy-highlight-new-loop. (isearch-lazy-highlight-max): Variable deleted. (isearch-lazy-highlight-max-at-a-time): New user variable, like isearch-lazy-highlight-max but controls a single invocation of isearch-lazy-highlight-update. (isearch-lazy-highlight-wrapped): Variable recreated. (isearch-lazy-highlight-window-start): New variable. (isearch-lazy-highlight-cleanup): Restored to behavior of before 2-Jan. (isearch-lazy-highlight-remove-overlays): Function deleted; behavior folded into isearch-lazy-highlight-cleanup. "Keep" behavior removed. (isearch-lazy-highlight-new-loop): Restore old behavior of calling isearch-lazy-highlight-update in a loop rather than just once. Test isearch-invalid-regexp here and decide not to start a new loop, rather than testing it each time through isearch-lazy-highlight-update. (isearch-lazy-highlight-search): Function restored. (isearch-lazy-highlight-update): Get called in a timer loop again, but this time highlight more than one match each time through. Only highlight matches in the visible part of the window. Start at point, move in the direction of the search, and wrap around at the edge of the window. Use sit-for to force redisplay and ensure window-start is credible. "Face suppressing" behavior removed; overlay priorities should make it unnecessary, right? (isearch-highlight): Face suppressing behavior removed. (isearch-dehighlight): Face suppressing behavior removed. (isearch-set-lazy-highlight-faces-at): Removed.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 17 Jan 2001 14:10:25 +0000
parents a3e7758ab661
children a94d9387d8cd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1 /* Communication subprocess for GNU Emacs acting as server.
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 25448
diff changeset
2 Copyright (C) 1986, 1987, 1992, 1994, 1999 Free Software Foundation, Inc.
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
3
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4 This file is part of GNU Emacs.
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
620
88a29c720fa7 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 470
diff changeset
8 the Free Software Foundation; either version 2, or (at your option)
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
9 any later version.
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
10
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 GNU General Public License for more details.
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13925
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 13925
diff changeset
19 Boston, MA 02111-1307, USA. */
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
20
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22 /* The GNU Emacs edit server process is run as a subprocess of Emacs
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
23 under control of the file lisp/server.el.
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
24 This program accepts communication from client (program emacsclient.c)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
25 and passes their commands (consisting of keyboard characters)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
26 up to the Emacs which then executes them. */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
27
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
28 #define NO_SHORTNAMES
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 25448
diff changeset
29 #include <../src/config.h>
16449
31ffc80a329d Fix 1996-09-02 change.
Karl Heuer <kwzh@gnu.org>
parents: 16137
diff changeset
30 #include <signal.h>
3393
5ee985ad8340 #undef signal.
Richard M. Stallman <rms@gnu.org>
parents: 620
diff changeset
31 #undef signal
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
32
10123
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
33 #if !defined (HAVE_SOCKETS) && !defined (HAVE_SYSVIPC)
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 #include <stdio.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
35
21388
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
36 int
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
37 main ()
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
38 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
39 fprintf (stderr, "Sorry, the Emacs server is supported only on systems\n");
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
40 fprintf (stderr, "with Berkeley sockets or System V IPC.\n");
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
41 exit (1);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
42 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
43
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
44 #else /* HAVE_SOCKETS or HAVE_SYSVIPC */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
45
21388
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
46 void perror_1 ();
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
47 void fatal_error ();
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
48
11368
91abe61bb495 Test NO_SOCKETS_IN_FILE_SYSTEM.
Richard M. Stallman <rms@gnu.org>
parents: 11031
diff changeset
49 #if defined (HAVE_SOCKETS) && ! defined (NO_SOCKETS_IN_FILE_SYSTEM)
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
50 /* BSD code is very different from SYSV IPC code */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
51
4178
57e52e312188 Include types.h before file.h.
Richard M. Stallman <rms@gnu.org>
parents: 3594
diff changeset
52 #include <sys/types.h>
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
53 #include <sys/file.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
54 #include <sys/socket.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
55 #include <sys/un.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
56 #include <stdio.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
57 #include <errno.h>
13925
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
58 #include <sys/stat.h>
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
59
21388
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
60 #ifdef HAVE_UNISTD_H
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
61 #include <unistd.h>
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
62 #endif
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
63
25448
95f7147cb572 Include <stdlib.h> if available. Don't declare errno if it's a macro.
Andreas Schwab <schwab@suse.de>
parents: 25261
diff changeset
64 #ifndef errno
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
65 extern int errno;
25448
95f7147cb572 Include <stdlib.h> if available. Don't declare errno if it's a macro.
Andreas Schwab <schwab@suse.de>
parents: 25261
diff changeset
66 #endif
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
67
8811
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
68 /* Copied from src/process.c */
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
69 #ifdef FD_SET
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
70 /* We could get this from param.h, but better not to depend on finding that.
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
71 And better not to risk that it might define other symbols used in this
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
72 file. */
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
73 #ifdef FD_SETSIZE
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
74 #define MAXDESC FD_SETSIZE
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
75 #else
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
76 #define MAXDESC 64
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
77 #endif
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
78 #define SELECT_TYPE fd_set
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
79 #else /* no FD_SET */
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
80 #define MAXDESC 32
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
81 #define SELECT_TYPE int
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
82
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
83 /* Define the macros to access a single-int bitmap of descriptors. */
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
84 #define FD_SET(n, p) (*(p) |= (1 << (n)))
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
85 #define FD_CLR(n, p) (*(p) &= ~(1 << (n)))
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
86 #define FD_ISSET(n, p) (*(p) & (1 << (n)))
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
87 #define FD_ZERO(p) (*(p) = 0)
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
88 #endif /* no FD_SET */
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
89
16070
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
90 /* This is the file name of the socket that we made. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
91
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
92 char *socket_name;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
93
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
94 /* Name of this program. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
95
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
96 char *progname;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
97
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
98 /* Handle fatal signals. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
99
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
100 /* This is the handler. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
101
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
102 SIGTYPE
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
103 delete_socket (sig)
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
104 int sig;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
105 {
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
106 signal (sig, SIG_DFL);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
107 unlink (socket_name);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
108 kill (getpid (), sig);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
109 }
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
110
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
111 /* Set up to handle all the signals. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
112
21388
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
113 void
16070
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
114 handle_signals ()
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
115 {
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
116 signal (SIGHUP, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
117 signal (SIGINT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
118 signal (SIGQUIT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
119 signal (SIGILL, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
120 signal (SIGTRAP, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
121 #ifdef SIGABRT
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
122 signal (SIGABRT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
123 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
124 #ifdef SIGHWE
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
125 signal (SIGHWE, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
126 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
127 #ifdef SIGPRE
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
128 signal (SIGPRE, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
129 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
130 #ifdef SIGORE
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
131 signal (SIGORE, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
132 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
133 #ifdef SIGUME
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
134 signal (SIGUME, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
135 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
136 #ifdef SIGDLK
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
137 signal (SIGDLK, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
138 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
139 #ifdef SIGCPULIM
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
140 signal (SIGCPULIM, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
141 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
142 #ifdef SIGIOT
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
143 /* This is missing on some systems - OS/2, for example. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
144 signal (SIGIOT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
145 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
146 #ifdef SIGEMT
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
147 signal (SIGEMT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
148 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
149 signal (SIGFPE, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
150 #ifdef SIGBUS
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
151 signal (SIGBUS, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
152 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
153 signal (SIGSEGV, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
154 #ifdef SIGSYS
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
155 signal (SIGSYS, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
156 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
157 signal (SIGTERM, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
158 #ifdef SIGXCPU
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
159 signal (SIGXCPU, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
160 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
161 #ifdef SIGXFSZ
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
162 signal (SIGXFSZ, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
163 #endif /* SIGXFSZ */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
164
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
165 #ifdef AIX
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
166 /* 20 is SIGCHLD, 21 is SIGTTIN, 22 is SIGTTOU. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
167 signal (SIGXCPU, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
168 #ifndef _I386
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
169 signal (SIGIOINT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
170 #endif
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
171 signal (SIGGRANT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
172 signal (SIGRETRACT, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
173 signal (SIGSOUND, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
174 signal (SIGMSG, delete_socket);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
175 #endif /* AIX */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
176 }
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
177
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
178 /* Print error message. `s1' is printf control string, `s2' is arg for it. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
179 void
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
180 error (s1, s2)
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
181 char *s1, *s2;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
182 {
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
183 fprintf (stderr, "%s: ", progname);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
184 fprintf (stderr, s1, s2);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
185 fprintf (stderr, "\n");
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
186 }
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
187
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
188 /* Print error message and exit. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
189 void
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
190 fatal (s1, s2)
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
191 char *s1, *s2;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
192 {
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
193 error (s1, s2);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
194 exit (1);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
195 }
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
196
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
197 /* Like malloc but get fatal error if memory is exhausted. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
198
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
199 long *
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
200 xmalloc (size)
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
201 unsigned int size;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
202 {
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
203 long *result = (long *) malloc (size);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
204 if (result == NULL)
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
205 fatal ("virtual memory exhausted", 0);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
206 return result;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
207 }
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
208
15682
9f7228c75a4b [__GNU_LIBRARY__]: Use size_t for fromlen.
Karl Heuer <kwzh@gnu.org>
parents: 15591
diff changeset
209 int
16070
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
210 main (argc, argv)
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
211 int argc;
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
212 char **argv;
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
213 {
24083
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
214 char *system_name;
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
215 int system_name_length;
16137
dc1387f877d4 (main): Declare `fromlen' as size_t, undo previous change.
Erik Naggum <erik@naggum.no>
parents: 16122
diff changeset
216 int s, infd;
19344
1151154e9ba4 (main): use SOCKLEN_TYPE for fromlen, if it is defined.
Richard M. Stallman <rms@gnu.org>
parents: 16449
diff changeset
217 #ifdef SOCKLEN_TYPE
1151154e9ba4 (main): use SOCKLEN_TYPE for fromlen, if it is defined.
Richard M. Stallman <rms@gnu.org>
parents: 16449
diff changeset
218 SOCKLEN_TYPE fromlen;
1151154e9ba4 (main): use SOCKLEN_TYPE for fromlen, if it is defined.
Richard M. Stallman <rms@gnu.org>
parents: 16449
diff changeset
219 #else
16137
dc1387f877d4 (main): Declare `fromlen' as size_t, undo previous change.
Erik Naggum <erik@naggum.no>
parents: 16122
diff changeset
220 size_t fromlen;
19344
1151154e9ba4 (main): use SOCKLEN_TYPE for fromlen, if it is defined.
Richard M. Stallman <rms@gnu.org>
parents: 16449
diff changeset
221 #endif
16137
dc1387f877d4 (main): Declare `fromlen' as size_t, undo previous change.
Erik Naggum <erik@naggum.no>
parents: 16122
diff changeset
222 struct sockaddr_un server, fromunix;
34952
a3e7758ab661 (main) <homedir>: Make its declaration conditional
Eli Zaretskii <eliz@gnu.org>
parents: 26083
diff changeset
223 #ifdef SERVER_HOME_DIR
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
224 char *homedir;
34952
a3e7758ab661 (main) <homedir>: Make its declaration conditional
Eli Zaretskii <eliz@gnu.org>
parents: 26083
diff changeset
225 #endif
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
226 char *str, string[BUFSIZ], code[BUFSIZ];
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 FILE *infile;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228 FILE **openfiles;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 int openfiles_size;
13925
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
230 struct stat statbuf;
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231
8025
f25cb844c3dd (main): Don't declare geteuid.
Richard M. Stallman <rms@gnu.org>
parents: 5856
diff changeset
232 #ifndef convex
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 char *getenv ();
8025
f25cb844c3dd (main): Don't declare geteuid.
Richard M. Stallman <rms@gnu.org>
parents: 5856
diff changeset
234 #endif
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235
16070
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
236 progname = argv[0];
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
237
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 openfiles_size = 20;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
239 openfiles = (FILE **) malloc (openfiles_size * sizeof (FILE *));
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
240 if (openfiles == 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
241 abort ();
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
242
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
243 /*
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
244 * Open up an AF_UNIX socket in this person's home directory
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
245 */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
246
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
247 if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
248 {
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
249 perror_1 ("socket");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 exit (1);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
252 server.sun_family = AF_UNIX;
25261
89be69860eeb (main): Move the dynamic allocation of
Karl Heuer <kwzh@gnu.org>
parents: 24382
diff changeset
253
24083
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
254 system_name_length = 32;
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
255 while (1)
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
256 {
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
257 system_name = (char *) xmalloc (system_name_length + 1);
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
258
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
259 /* system_name must be null-terminated string. */
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
260 system_name[system_name_length] = '\0';
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
261
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
262 if (gethostname (system_name, system_name_length) == 0)
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
263 break;
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
264
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
265 free (system_name);
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
266 system_name_length *= 2;
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
267 }
33b162fe4507 (main): Eliminate arbitrary limit on
Richard M. Stallman <rms@gnu.org>
parents: 23413
diff changeset
268
25261
89be69860eeb (main): Move the dynamic allocation of
Karl Heuer <kwzh@gnu.org>
parents: 24382
diff changeset
269 #ifndef SERVER_HOME_DIR
470
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
270 sprintf (server.sun_path, "/tmp/esrv%d-%s", geteuid (), system_name);
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
271
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
272 if (unlink (server.sun_path) == -1 && errno != ENOENT)
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
273 {
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
274 perror_1 ("unlink");
470
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
275 exit (1);
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
276 }
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
277 #else
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
278 if ((homedir = getenv ("HOME")) == NULL)
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
279 fatal_error ("No home directory\n");
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
280
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
281 strcpy (server.sun_path, homedir);
10123
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
282 strcat (server.sun_path, "/.emacs-server-");
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
283 strcat (server.sun_path, system_name);
470
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
284 /* Delete anyone else's old server. */
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
285 unlink (server.sun_path);
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
286 #endif
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
287
16070
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
288 /* Save the socket name so we can delete it. */
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
289 socket_name = (char *) xmalloc (strlen (server.sun_path) + 1);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
290 strcpy (socket_name, server.sun_path);
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
291
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
292 handle_signals ();
5aa311b84644 On fatal signal, delete socket-file:
Richard M. Stallman <rms@gnu.org>
parents: 15719
diff changeset
293
3594
aacca1901f73 * emacsserver.c (main): When we're passing a `struct sockaddr_un'
Jim Blandy <jimb@redhat.com>
parents: 3393
diff changeset
294 if (bind (s, (struct sockaddr *) &server, strlen (server.sun_path) + 2) < 0)
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
295 {
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
296 perror_1 ("bind");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
297 exit (1);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
298 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
299 /* Only this user can send commands to this Emacs. */
13925
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
300 if (stat (server.sun_path, &statbuf) < 0)
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
301 {
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
302 perror_1 ("bind");
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
303 exit (1);
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
304 }
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
305
5baf69817438 (main): Do chmod based on existing permission.
Karl Heuer <kwzh@gnu.org>
parents: 12415
diff changeset
306 chmod (server.sun_path, statbuf.st_mode & 0600);
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
307 /*
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
308 * Now, just wait for everything to come in..
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
309 */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310 if (listen (s, 5) < 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 {
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
312 perror_1 ("listen");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 exit (1);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
314 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 /* Disable sigpipes in case luser kills client... */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 signal (SIGPIPE, SIG_IGN);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
318 for (;;)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 {
8811
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
320 SELECT_TYPE rmask;
9418
5d8165cdb0d8 [! SYSVIPC] (main): Fix uses of FD_* macros: fd_set arg is a pointer,
Roland McGrath <roland@gnu.org>
parents: 8811
diff changeset
321 FD_ZERO (&rmask);
5d8165cdb0d8 [! SYSVIPC] (main): Fix uses of FD_* macros: fd_set arg is a pointer,
Roland McGrath <roland@gnu.org>
parents: 8811
diff changeset
322 FD_SET (0, &rmask);
5d8165cdb0d8 [! SYSVIPC] (main): Fix uses of FD_* macros: fd_set arg is a pointer,
Roland McGrath <roland@gnu.org>
parents: 8811
diff changeset
323 FD_SET (s, &rmask);
8811
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
324 if (select (s + 1, &rmask, 0, 0, 0) < 0)
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
325 perror_1 ("select");
9418
5d8165cdb0d8 [! SYSVIPC] (main): Fix uses of FD_* macros: fd_set arg is a pointer,
Roland McGrath <roland@gnu.org>
parents: 8811
diff changeset
326 if (FD_ISSET (s, &rmask)) /* client sends list of filenames */
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 fromlen = sizeof (fromunix);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
329 fromunix.sun_family = AF_UNIX;
8811
7cd89ebbe641 (FD_*) [HAVE_SOCKETS & !HAVE_SYSVIPC]: If not already defined, use simple
Karl Heuer <kwzh@gnu.org>
parents: 8482
diff changeset
330 infd = accept (s, (struct sockaddr *) &fromunix, &fromlen);
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
331 if (infd < 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
332 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
333 if (errno == EMFILE || errno == ENFILE)
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
334 fprintf (stderr, "Error: too many clients.\n");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 else
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
336 perror_1 ("accept");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337 continue;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
338 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
339
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
340 if (infd >= openfiles_size)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
341 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
342 openfiles_size *= 2;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
343 openfiles = (FILE **) realloc (openfiles,
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
344 openfiles_size * sizeof (FILE *));
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
345 if (openfiles == 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
346 abort ();
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
349 infile = fdopen (infd, "r+"); /* open stream */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 if (infile == NULL)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
351 {
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
352 fprintf (stderr, "Error: too many clients.\n");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 write (infd, "Too many clients.\n", 18);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354 close (infd); /* Prevent descriptor leak.. */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 continue;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 str = fgets (string, BUFSIZ, infile);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 if (str == NULL)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 {
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
360 perror_1 ("fgets");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 close (infd); /* Prevent descriptor leak.. */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
362 continue;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
363 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 openfiles[infd] = infile;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365 printf ("Client: %d %s", infd, string);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 /* If what we read did not end in a newline,
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367 it means there is more. Keep reading from the socket
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 and outputting to Emacs, until we get the newline. */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 while (string[strlen (string) - 1] != '\n')
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 if (fgets (string, BUFSIZ, infile) == 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 break;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 printf ("%s", string);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
374 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
375 fflush (stdout);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 fflush (infile);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
377 continue;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 }
9418
5d8165cdb0d8 [! SYSVIPC] (main): Fix uses of FD_* macros: fd_set arg is a pointer,
Roland McGrath <roland@gnu.org>
parents: 8811
diff changeset
379 else if (FD_ISSET (0, &rmask)) /* emacs sends codeword, fd, and string message */
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 /* Read command codeword and fd */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 clearerr (stdin);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383 scanf ("%s %d%*c", code, &infd);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 if (ferror (stdin) || feof (stdin))
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
385 fatal_error ("server: error reading from standard input\n");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
387 /* Transfer text from Emacs to the client, up to a newline. */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
388 infile = openfiles[infd];
15591
deab323dd651 (main) [HAVE_SOCKETS]: Call rewind before writing to infile.
Miles Bader <miles@gnu.org>
parents: 14186
diff changeset
389 rewind (infile);
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 while (1)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 if (fgets (string, BUFSIZ, stdin) == 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
393 break;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 fprintf (infile, "%s", string);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 if (string[strlen (string) - 1] == '\n')
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 break;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398 fflush (infile);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400 /* If command is close, close connection to client. */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 if (strncmp (code, "Close:", 6) == 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402 if (infd > 2)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 fclose (infile);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 close (infd);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
407 continue;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 #else /* This is the SYSV IPC section */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 #include <sys/types.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
415 #include <sys/ipc.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 #include <sys/msg.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 #include <setjmp.h>
9593
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
418 #include <errno.h>
10123
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
419 #include <sys/utsname.h>
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
420
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
421 struct utsname system_name;
9593
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
422
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
423 #ifndef errno
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
424 extern int errno;
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
425 #endif
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
427 jmp_buf msgenv;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
428
620
88a29c720fa7 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 470
diff changeset
429 SIGTYPE
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 msgcatch ()
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 longjmp (msgenv, 1);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
436 /* "THIS has to be fixed. Remember, stderr may not exist...-rlk."
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
437 Incorrect. This program runs as an inferior of Emacs.
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 Its stderr always exists--rms. */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 #include <stdio.h>
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
440
21388
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
441 int
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 main ()
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 {
8482
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
444 int s, infd, fromlen, ioproc;
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 key_t key;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 struct msgbuf * msgp =
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 (struct msgbuf *) malloc (sizeof *msgp + BUFSIZ);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 struct msqid_ds msg_st;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 int p;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 char *homedir, *getenv ();
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
451 char string[BUFSIZ];
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 FILE *infile;
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
454 /*
10123
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
455 * Create a message queue using ~/.emacs-server as the path for ftok
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
456 */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
457 if ((homedir = getenv ("HOME")) == NULL)
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
458 fatal_error ("No home directory\n");
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
459
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
460 strcpy (string, homedir);
10123
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
461 #ifndef HAVE_LONG_FILE_NAMES
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
462 /* If file names are short, we can't fit the host name. */
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
463 strcat (string, "/.emacs-server");
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
464 #else
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
465 strcat (string, "/.emacs-server-");
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
466 uname (&system_name);
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
467 strcat (string, system_name.nodename);
bb3d25f73eaf [HAVE_SYSVIPC]: Include sys/utsname.h.
Richard M. Stallman <rms@gnu.org>
parents: 9593
diff changeset
468 #endif
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 creat (string, 0600);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
470 key = ftok (string, 1); /* unlikely to be anyone else using it */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 s = msgget (key, 0600 | IPC_CREAT);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 if (s == -1)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
473 {
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
474 perror_1 ("msgget");
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
475 exit (1);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
476 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 /* Fork so we can close connection even if parent dies */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 p = fork ();
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
480 if (setjmp (msgenv))
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 msgctl (s, IPC_RMID, 0);
9593
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
483 if (p > 0)
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
484 kill (p, SIGKILL);
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
485 exit (0);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
486 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 signal (SIGTERM, msgcatch);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
488 signal (SIGINT, msgcatch);
9593
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
489 signal (SIGHUP, msgcatch);
5856
16e98db8cc1b (main) [HAVE_SYSVIPC]: Reverse test of fork value.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
490 if (p > 0)
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 {
5856
16e98db8cc1b (main) [HAVE_SYSVIPC]: Reverse test of fork value.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
492 /* This is executed in the original process that did the fork above. */
16e98db8cc1b (main) [HAVE_SYSVIPC]: Reverse test of fork value.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
493 /* Get pid of Emacs itself. */
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
494 p = getppid ();
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 setpgrp (); /* Gnu kills process group on exit */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496 while (1)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 {
5856
16e98db8cc1b (main) [HAVE_SYSVIPC]: Reverse test of fork value.
Richard M. Stallman <rms@gnu.org>
parents: 4696
diff changeset
498 /* Is Emacs still alive? */
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
499 if (kill (p, 0) < 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501 msgctl (s, IPC_RMID, 0);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 exit (0);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
503 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 sleep (10);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
506 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507
8482
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
508 /* This is executed in the child made by forking above.
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
509 Call it c1. Make another process, ioproc. */
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
510
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
511 ioproc = fork ();
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
512 if (ioproc == 0)
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
513 {
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
514 /* In process ioproc, wait for text from Emacs,
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
515 and send it to the process c1.
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
516 This way, c1 only has to wait for one source of input. */
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
517 while (fgets (msgp->mtext, BUFSIZ, stdin))
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
518 {
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
519 msgp->mtype = 1;
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
520 msgsnd (s, msgp, strlen (msgp->mtext) + 1, 0);
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
521 }
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
522 exit (1);
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
523 }
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
524
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
525 /* In the process c1,
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
526 listen for messages from clients and pass them to Emacs. */
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 while (1)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
529 if ((fromlen = msgrcv (s, msgp, BUFSIZ - 1, 1, 0)) < 0)
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
530 {
9593
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
531 #ifdef EINTR
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
532 if (errno == EINTR)
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
533 continue;
68882a46b5fc [SYSV_IPC] (main): Catch SIGHUP as well. Don't
Richard M. Stallman <rms@gnu.org>
parents: 9418
diff changeset
534 #endif
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
535 perror_1 ("msgrcv");
470
db84d8d9a1d9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 204
diff changeset
536 exit (1);
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
538 else
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 {
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
540 msgctl (s, IPC_STAT, &msg_st);
8482
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
541
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
542 /* Distinguish whether the message came from a client, or from
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
543 ioproc. */
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
544 if (msg_st.msg_lspid == ioproc)
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
545 {
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
546 char code[BUFSIZ];
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
547 int inproc;
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
548
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
549 /* Message from ioproc: tell a client we are done. */
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
550 msgp->mtext[strlen (msgp->mtext)-1] = 0;
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
551 sscanf (msgp->mtext, "%s %d", code, &inproc);
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
552 msgp->mtype = inproc;
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
553 msgsnd (s, msgp, strlen (msgp->mtext) + 1, 0);
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
554 continue;
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
555 }
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
556
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
557 /* This is a request from a client: copy to stdout
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
558 so that Emacs will get it. Include msg_lspid
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
559 so server.el can tell us where to send the reply. */
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
560 strncpy (string, msgp->mtext, fromlen);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
561 string[fromlen] = 0; /* make sure */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
562 /* Newline is part of string.. */
8482
ffbf38ae06d1 [SYSV_IPC] (main): Make a separate process
Richard M. Stallman <rms@gnu.org>
parents: 8410
diff changeset
563 printf ("Client: %d %s", msg_st.msg_lspid, string);
204
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
564 fflush (stdout);
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
565 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
566 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
567 }
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
568
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
569 #endif /* HAVE_SYSVIPC */
00dde7fa9e98 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
570
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
571
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
572 /* This is like perror but puts `Error: ' at the beginning. */
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
573
21388
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
574 void
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
575 perror_1 (string)
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
576 char *string;
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
577 {
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
578 char *copy = (char *) malloc (strlen (string) + 8);
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
579 if (copy == 0)
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
580 fatal_error ("Virtual memory exhausted");
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
581
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
582 strcpy (copy, "Error: ");
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
583 strcat (copy, string);
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
584 perror (copy);
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
585 }
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
586
21388
1a8c44e38d9c Include <unistd.h> if available.
Andreas Schwab <schwab@suse.de>
parents: 19344
diff changeset
587 void
12415
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
588 fatal_error (string)
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
589 char *string;
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
590 {
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
591 fprintf (stderr, "%s", "Error: ");
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
592 fprintf (stderr, string);
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
593 exit (1);
c07a5e8f40ae Make all error messages start with `Error: '.
Richard M. Stallman <rms@gnu.org>
parents: 11368
diff changeset
594 }
24382
740c8322ca39 (perror_1, fatal_error): Don't compile unless needed.
Karl Heuer <kwzh@gnu.org>
parents: 24083
diff changeset
595 #endif /* HAVE_SOCKETS or HAVE_SYSVIPC */