* ../etc/gnuserv.README relative to the directory containing this file)
*/
-#if 0
-/* Hand-munged RCS header */
-static char rcsid [] = "!Header: gnuclient.c,v 2.2 95/12/12 01:39:21 wing nene !";
+#ifdef CYGWIN
+extern void cygwin_conv_to_posix_path(const char *path, char *posix_path);
#endif
#include "gnuserv.h"
+
+char gnuserv_version[] = "gnuclient version " GNUSERV_VERSION;
+
#include "getopt.h"
#include <stdio.h>
signal(SIGCONT, tell_emacs_to_resume);
#endif
- connect_type = make_connection (NULL, (u_short) 0, &s);
+ connect_type = make_connection (NULL, 0, &s);
sprintf(buffer,"(gnuserv-eval '(resume-pid-console %d))", (int)getpid());
send_string(s, buffer);
{
if (cp == NULL)
{ /* haven't calculated it yet */
-#ifdef BSD
- if (getwd (cwd) == 0)
-#else /* !BSD */
+#ifdef HAVE_GETCWD
if (getcwd (cwd,MAXPATHLEN) == NULL)
-#endif /* !BSD */
+#else
+ if (getwd (cwd) == 0)
+#endif /* HAVE_GETCWD */
{
perror (progname);
fprintf (stderr, "%s: unable to get current working directory\n",
/* fullpath - returned full pathname */
/* filename - filename to expand */
{
+#ifdef CYGWIN
+ char cygwinFilename[MAXPATHLEN+1];
+#endif
+
int len;
+ fullpath[0] = fullpath[MAXPATHLEN] = '\0';
- fullpath[0] = '\0';
+#ifdef CYGWIN
+ /*
+ If we're in cygwin, just convert it and let the unix stuff handle it.
+ */
+ cygwin_conv_to_posix_path(filename, cygwinFilename);
+ filename = cygwinFilename;
+#endif
if (filename[0] && filename[0] == '/')
{
/* Absolute (unix-style) pathname. Do nothing */
- strcat (fullpath, filename);
+ strncat (fullpath, filename, MAXPATHLEN);
}
-#ifdef CYGWIN
- else if (filename[0] && filename[0] == '\\' &&
- filename[1] && filename[1] == '\\')
- {
- /* This path includes the server name (something like
- "\\server\path"), so we assume it's absolute. Do nothing to
- it. */
- strcat (fullpath, filename);
- }
- else if (filename[0] &&
- filename[1] && filename[1] == ':' &&
- filename[2] && filename[2] == '\\')
- {
- /* Absolute pathname with drive letter. Convert "<drive>:"
- to "//<drive>/". */
- strcat (fullpath, "//");
- strncat (fullpath, filename, 1);
- strcat (fullpath, &filename[2]);
- }
-#endif
else
{
/* Assume relative Unix style path. Get the current directory
and prepend it. FIXME: need to fix the case of DOS paths like
"\foo", where we need to get the current drive. */
-
- strcat (fullpath, get_current_working_directory ());
+
+ strncat (fullpath, get_current_working_directory (), MAXPATHLEN);
len = strlen (fullpath);
- if (len > 0 && fullpath[len-1] == '/') /* trailing slash already? */
- ; /* yep */
- else
- strcat (fullpath, "/"); /* nope, append trailing slash */
+ /* If no trailing slash, add one */
+ if (len <= 0 || (fullpath[len - 1] != '/' && len < MAXPATHLEN))
+ {
+ strcat (fullpath, "/");
+ len++;
+ }
+
/* Don't forget to add the filename! */
- strcat (fullpath,filename);
+ strncat (fullpath, filename, MAXPATHLEN - len);
}
} /* filename_expand */
char *remotearg;
char thishost[HOSTNAMSZ]; /* this hostname */
char remotepath[MAXPATHLEN+1]; /* remote pathname */
- char *path;
int rflg = 0; /* pathname given on cmdline */
char *portarg;
- u_short port = 0; /* port to server */
+ unsigned short port = 0; /* port to server */
#endif /* INTERNET_DOMAIN_SOCKETS */
+ char *path; /* used indiscriminately */
#ifdef SYSV_IPC
struct msgbuf *msgp; /* message */
#endif /* SYSV_IPC */
break;
case 'r':
GET_ARGUMENT (remotearg, "-r");
- strcpy (remotepath, remotearg);
+ strncpy (remotepath, remotearg, MAXPATHLEN);
rflg = 1;
break;
#endif /* INTERNET_DOMAIN_SOCKETS */
{
fprintf (stderr,
#ifdef INTERNET_DOMAIN_SOCKETS
- "usage: %s [-nw] [-display display] [-q] [-v] [-l library]\n"
+ "Usage: %s [-nw] [-display display] [-q] [-v] [-l library]\n"
" [-batch] [-f function] [-eval form]\n"
" [-h host] [-p port] [-r remote-path] [[+line] file] ...\n",
#else /* !INTERNET_DOMAIN_SOCKETS */
- "usage: %s [-nw] [-q] [-v] [-l library] [-f function] [-eval form] "
+ "Usage: %s [-nw] [-q] [-v] [-l library] [-f function] [-eval form] "
"[[+line] path] ...\n",
#endif /* !INTERNET_DOMAIN_SOCKETS */
progname);
progname);
exit (1);
}
+#if defined(INTERNET_DOMAIN_SOCKETS)
if (suppress_windows_system && hostarg)
{
fprintf (stderr, "%s: Remote editing is available only on X\n",
progname);
exit (1);
}
-
+#endif
*result = '\0';
if (eval_function || eval_form || load_library)
{
#if defined(INTERNET_DOMAIN_SOCKETS)
connect_type = make_connection (hostarg, port, &s);
#else
- connect_type = make_connection (NULL, (u_short) 0, &s);
+ connect_type = make_connection (NULL, 0, &s);
#endif
sprintf (command, "(gnuserv-eval%s '(progn ", quick ? "-quickly" : "");
send_string (s, command);
#if defined(INTERNET_DOMAIN_SOCKETS)
connect_type = make_connection (hostarg, port, &s);
#else
- connect_type = make_connection (NULL, (u_short) 0, &s);
+ connect_type = make_connection (NULL, 0, &s);
#endif
sprintf (command, "(gnuserv-eval%s '(progn ", quick ? "-quickly" : "");
send_string (s, command);
#if defined(INTERNET_DOMAIN_SOCKETS)
connect_type = make_connection (hostarg, port, &s);
#else
- connect_type = make_connection (NULL, (u_short) 0, &s);
+ connect_type = make_connection (NULL, 0, &s);
#endif
send_string (s, "(gnuserv-eval '(emacs-pid))");
send_string (s, EOT_STR);
progname);
exit (1);
}
- /* Don't do disconnect_from_server becasue we have already read
+ /* Don't do disconnect_from_server because we have already read
data, and disconnect doesn't do anything else. */
-#ifndef INTERNET_DOMAIN_SOCKETS
+#ifdef SYSV_IPC
if (connect_type == (int) CONN_IPC)
disconnect_from_ipc_server (s, msgp, FALSE);
#endif /* !SYSV_IPC */
#if defined(INTERNET_DOMAIN_SOCKETS)
connect_type = make_connection (hostarg, port, &s);
#else
- connect_type = make_connection (NULL, (u_short) 0, &s);
+ connect_type = make_connection (NULL, 0, &s);
#endif
#ifdef INTERNET_DOMAIN_SOCKETS
* to this machine */
if ((ptr = getenv ("GNU_NODE")) != NULL)
/* user specified a path */
- strcpy (remotepath, ptr);
+ strncpy (remotepath, ptr, MAXPATHLEN);
}
#if 0 /* This is really bogus... re-enable it if you must have it! */
#if defined (hp9000s300) || defined (hp9000s800)
}
else /* !suppress_windows_system */
{
- if (display)
+ if (0)
+ ;
+#ifdef HAVE_X_WINDOWS
+ else if (display)
sprintf (command, "(gnuserv-edit-files '(x %s) '(",
clean_string (display));
+#endif
+#ifdef HAVE_GTK
+ else if (display)
+ strcpy (command, "(gnuserv-edit-files '(gtk nil) '(");
+#endif
#ifdef HAVE_MS_WINDOWS
else
sprintf (command, "(gnuserv-edit-files '(mswindows nil) '(");