up to the Emacs which then executes them. */
#define NO_SHORTNAMES
-#include <sys/signal.h>
+#include <signal.h>
#include <../src/config.h>
#undef read
#undef write
#if !defined (HAVE_SOCKETS) && !defined (HAVE_SYSVIPC)
#include <stdio.h>
+int
main ()
{
fprintf (stderr, "Sorry, the Emacs server is supported only on systems\n");
#else /* HAVE_SOCKETS or HAVE_SYSVIPC */
+void perror_1 ();
+void fatal_error ();
+
#if defined (HAVE_SOCKETS) && ! defined (NO_SOCKETS_IN_FILE_SYSTEM)
/* BSD code is very different from SYSV IPC code */
#include <errno.h>
#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
extern int errno;
/* Copied from src/process.c */
/* Set up to handle all the signals. */
+void
handle_signals ()
{
signal (SIGHUP, delete_socket);
int argc;
char **argv;
{
- char system_name[32];
- int s, infd, fromlen;
+ char *system_name;
+ int system_name_length;
+ int s, infd;
+#ifdef SOCKLEN_TYPE
+ SOCKLEN_TYPE fromlen;
+#else
+ size_t fromlen;
+#endif
struct sockaddr_un server, fromunix;
char *homedir;
char *str, string[BUFSIZ], code[BUFSIZ];
exit (1);
}
server.sun_family = AF_UNIX;
+
+ 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;
+ }
+
#ifndef SERVER_HOME_DIR
- gethostname (system_name, sizeof (system_name));
sprintf (server.sun_path, "/tmp/esrv%d-%s", geteuid (), system_name);
if (unlink (server.sun_path) == -1 && errno != ENOENT)
strcpy (server.sun_path, homedir);
strcat (server.sun_path, "/.emacs-server-");
- gethostname (system_name, sizeof (system_name));
strcat (server.sun_path, system_name);
/* Delete anyone else's old server. */
unlink (server.sun_path);
Its stderr always exists--rms. */
#include <stdio.h>
+int
main ()
{
int s, infd, fromlen, ioproc;
#endif /* HAVE_SYSVIPC */
-#endif /* HAVE_SOCKETS or HAVE_SYSVIPC */
\f
/* This is like perror but puts `Error: ' at the beginning. */
+void
perror_1 (string)
char *string;
{
perror (copy);
}
+void
fatal_error (string)
char *string;
{
fprintf (stderr, string);
exit (1);
}
+#endif /* HAVE_SOCKETS or HAVE_SYSVIPC */