aboutsummaryrefslogtreecommitdiffstats
path: root/lib-src
diff options
context:
space:
mode:
authorJuanma Barranquero <[email protected]>2006-11-22 14:19:35 +0000
committerJuanma Barranquero <[email protected]>2006-11-22 14:19:35 +0000
commit42073bfb9e0c7136dd2e5d0feb6ffb6ed3b9d1ca (patch)
treed3acde3af846efd88078b31e5cd7a073c4f7c531 /lib-src
parentfef1f0f2a53aefd5c3e44fc48c02aabb891232ba (diff)
Include <stdarg.h>.
[WINDOWSNT]: Include <windows.h>. (w32_check_console_app): New function. (message): New function. (decode_options, print_help_and_exit, fail, main, initialize_sockets, get_server_config, set_tcp_socket, set_local_socket, set_socket): Use message().
Diffstat (limited to 'lib-src')
-rw-r--r--lib-src/ChangeLog10
-rw-r--r--lib-src/emacsclient.c107
2 files changed, 87 insertions, 30 deletions
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 70bd5bb6ed..5c6629f79d 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,13 @@
+2006-11-22 Lennart Borgman <[email protected]>
+
+ * emacsclient.c: Include <stdarg.h>.
+ [WINDOWSNT]: Include <windows.h>.
+ (w32_check_console_app): New function.
+ (message): New function.
+ (decode_options, print_help_and_exit, fail, main)
+ (initialize_sockets, get_server_config, set_tcp_socket)
+ (set_local_socket, set_socket): Use message().
+
2006-11-13 Jason Rumney <[email protected]>
* emacsclient.c [WINDOWSNT]: Let config.h define HAVE_SOCKETS and
diff --git a/lib-src/emacsclient.c b/lib-src/emacsclient.c
index 3e8c56f2ce..4cd960d9ea 100644
--- a/lib-src/emacsclient.c
+++ b/lib-src/emacsclient.c
@@ -34,6 +34,7 @@ Boston, MA 02110-1301, USA. */
# include <malloc.h>
# include <stdlib.h>
+# include <windows.h>
# define NO_SOCKETS_IN_FILE_SYSTEM
@@ -58,6 +59,7 @@ Boston, MA 02110-1301, USA. */
#undef signal
+#include <stdarg.h>
#include <ctype.h>
#include <stdio.h>
#include "getopt.h"
@@ -144,6 +146,56 @@ struct option longopts[] =
{ 0, 0, 0, 0 }
};
+/* Message functions. */
+
+#ifdef WINDOWSNT
+/* I first tried to check for STDOUT. The check did not work,
+ I get a valid handle also in nonconsole apps.
+ Instead I test for console title, which seems to work. */
+int
+w32_window_app()
+{
+ static int window_app = -1;
+ char szTitle[MAX_PATH];
+
+ if (window_app < 0)
+ window_app = (GetConsoleTitleA (szTitle, MAX_PATH) == 0);
+
+ return window_app;
+}
+#endif
+
+void
+message (int is_error, char *message, ...)
+{
+ char buf [2048];
+ char *msg = buf;
+ va_list args;
+
+ va_start (args, message);
+
+ if (is_error)
+ {
+ sprintf (buf, "%s: ", progname);
+ msg = strchr (buf, '\0');
+ }
+
+ vsprintf (msg, message, args);
+ va_end (args);
+
+#ifdef WINDOWSNT
+ if (w32_window_app ())
+ {
+ if (is_error)
+ MessageBox (NULL, msg, "Emacsclient ERROR", MB_ICONERROR);
+ else
+ MessageBox (NULL, msg, "Emacsclient", MB_ICONINFORMATION);
+ }
+ else
+#endif
+ fprintf (is_error ? stderr : stdout, msg);
+}
+
/* Decode the options from argv and argc.
The global variable `optind' will say how many arguments we used up. */
@@ -201,7 +253,7 @@ decode_options (argc, argv)
break;
case 'V':
- printf ("emacsclient %s\n", VERSION);
+ message (FALSE, "emacsclient %s\n", VERSION);
exit (EXIT_SUCCESS);
break;
@@ -210,7 +262,7 @@ decode_options (argc, argv)
break;
default:
- fprintf (stderr, "Try `%s --help' for more information\n", progname);
+ message (TRUE, "Try `%s --help' for more information\n", progname);
exit (EXIT_FAILURE);
break;
}
@@ -220,7 +272,7 @@ decode_options (argc, argv)
void
print_help_and_exit ()
{
- printf (
+ message (FALSE,
"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\
@@ -261,7 +313,7 @@ fail (argc, argv)
argv[i] = (char *)alternate_editor;
#endif
execvp (alternate_editor, argv + i);
- fprintf (stderr, "%s: error executing alternate editor \"%s\"\n",
+ message (TRUE, "%s: error executing alternate editor \"%s\"\n",
progname, alternate_editor);
}
exit (EXIT_FAILURE);
@@ -275,9 +327,8 @@ main (argc, argv)
int argc;
char **argv;
{
- fprintf (stderr, "%s: Sorry, the Emacs server is supported only\n",
+ message (TRUE, "%s: Sorry, the Emacs server is supported only\non systems with Berkely sockets.\n",
argv[0]);
- fprintf (stderr, "on systems with Berkeley sockets.\n");
fail (argc, argv);
}
@@ -426,7 +477,7 @@ initialize_sockets ()
if (WSAStartup (MAKEWORD (2, 0), &wsaData))
{
- fprintf (stderr, "%s: error initializing WinSock2", progname);
+ message (TRUE, "%s: error initializing WinSock2", progname);
exit (EXIT_FAILURE);
}
@@ -482,7 +533,7 @@ get_server_config (server, authentication)
}
else
{
- fprintf (stderr, "%s: invalid configuration info", progname);
+ message (TRUE, "%s: invalid configuration info", progname);
exit (EXIT_FAILURE);
}
@@ -492,7 +543,7 @@ get_server_config (server, authentication)
if (! fread (authentication, AUTH_KEY_LENGTH, 1, config))
{
- fprintf (stderr, "%s: cannot read authentication info", progname);
+ message (TRUE, "%s: cannot read authentication info", progname);
exit (EXIT_FAILURE);
}
@@ -537,7 +588,7 @@ set_tcp_socket ()
return INVALID_SOCKET;
if (server.sin_addr.s_addr != inet_addr ("127.0.0.1"))
- fprintf (stderr, "%s: connected to remote socket at %s\n",
+ message (TRUE, "%s: connected to remote socket at %s\n",
progname, inet_ntoa (server.sin_addr));
/*
@@ -545,8 +596,7 @@ set_tcp_socket ()
*/
if ((s = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
{
- fprintf (stderr, "%s: ", progname);
- perror ("socket");
+ message (TRUE, "%s: socket: %s\n", progname, strerror (errno));
return INVALID_SOCKET;
}
@@ -555,8 +605,7 @@ set_tcp_socket ()
*/
if (connect (s, (struct sockaddr *) &server, sizeof server) < 0)
{
- fprintf (stderr, "%s: ", progname);
- perror ("connect");
+ message (TRUE, "%s: connect: %s\n", progname, strerror (errno));
return INVALID_SOCKET;
}
@@ -608,8 +657,7 @@ set_local_socket ()
if ((s = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
{
- fprintf (stderr, "%s: ", progname);
- perror ("socket");
+ message (TRUE, "%s: socket: %s\n", progname, strerror (errno));
return INVALID_SOCKET;
}
@@ -639,7 +687,7 @@ set_local_socket ()
strcpy (server.sun_path, socket_name);
else
{
- fprintf (stderr, "%s: socket-name %s too long",
+ message (TRUE, "%s: socket-name %s too long",
progname, socket_name);
exit (EXIT_FAILURE);
}
@@ -674,7 +722,7 @@ set_local_socket ()
strcpy (server.sun_path, socket_name);
else
{
- fprintf (stderr, "%s: socket-name %s too long",
+ message (TRUE, "%s: socket-name %s too long",
progname, socket_name);
exit (EXIT_FAILURE);
}
@@ -694,7 +742,7 @@ set_local_socket ()
we are root. */
if (0 != geteuid ())
{
- fprintf (stderr, "%s: Invalid socket owner\n", progname);
+ message (TRUE, "%s: Invalid socket owner\n", progname);
return INVALID_SOCKET;
}
break;
@@ -702,12 +750,12 @@ set_local_socket ()
case 2:
/* `stat' failed */
if (saved_errno == ENOENT)
- fprintf (stderr,
+ message (TRUE,
"%s: can't find socket; have you started the server?\n\
To start the server in Emacs, type \"M-x server-start\".\n",
progname);
else
- fprintf (stderr, "%s: can't stat %s: %s\n",
+ message (TRUE, "%s: can't stat %s: %s\n",
progname, server.sun_path, strerror (saved_errno));
return INVALID_SOCKET;
}
@@ -716,8 +764,7 @@ To start the server in Emacs, type \"M-x server-start\".\n",
if (connect (s, (struct sockaddr *) &server, strlen (server.sun_path) + 2)
< 0)
{
- fprintf (stderr, "%s: ", progname);
- perror ("connect");
+ message (TRUE, "%s: connect: %s\n", progname, strerror (errno));
return INVALID_SOCKET;
}
@@ -740,7 +787,7 @@ set_socket ()
if ((s != INVALID_SOCKET) || alternate_editor)
return s;
- fprintf (stderr, "%s: error accessing socket \"%s\"",
+ message (TRUE, "%s: error accessing socket \"%s\"",
progname, socket_name);
exit (EXIT_FAILURE);
}
@@ -756,7 +803,7 @@ set_socket ()
if ((s != INVALID_SOCKET) || alternate_editor)
return s;
- fprintf (stderr, "%s: error accessing server file \"%s\"",
+ message (TRUE, "%s: error accessing server file \"%s\"",
progname, server_file);
exit (EXIT_FAILURE);
}
@@ -775,7 +822,7 @@ set_socket ()
return s;
/* No implicit or explicit socket, and no alternate editor. */
- fprintf (stderr, "%s: No socket or alternate editor. Please use:\n\n"
+ message (TRUE, "%s: No socket or alternate editor. Please use:\n\n"
#ifndef NO_SOCKETS_IN_FILE_SYSTEM
"\t--socket-name\n"
#endif
@@ -802,8 +849,8 @@ main (argc, argv)
if ((argc - optind < 1) && !eval)
{
- fprintf (stderr, "%s: file name or argument required\n", progname);
- fprintf (stderr, "Try `%s --help' for more information\n", progname);
+ message (TRUE, "%s: file name or argument required\nTry `%s --help' for more information\n",
+ progname, progname);
exit (EXIT_FAILURE);
}
@@ -819,10 +866,10 @@ main (argc, argv)
{
/* getwd puts message in STRING if it fails. */
#ifdef HAVE_GETCWD
- fprintf (stderr, "%s: %s (%s)\n", progname,
+ message (TRUE, "%s: %s (%s)\n", progname,
"Cannot get current working directory", strerror (errno));
#else
- fprintf (stderr, "%s: %s (%s)\n", progname, string, strerror (errno));
+ message (TRUE, "%s: %s (%s)\n", progname, string, strerror (errno));
#endif
fail (argc, argv);
}