X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lib-src%2Fgnuclient.c;h=311249e4411cb383cdb8a2151e0a48e40dbd0877;hb=124091150ca8f5a6ac0890bc1e1eae7d37f740db;hp=2b1e5d7561c0aa3856d0b0a499bc799a9fa73af2;hpb=3062d425fac0473eb5aa2efc0bb002f6ce0cb028;p=chise%2Fxemacs-chise.git.1 diff --git a/lib-src/gnuclient.c b/lib-src/gnuclient.c index 2b1e5d7..311249e 100644 --- a/lib-src/gnuclient.c +++ b/lib-src/gnuclient.c @@ -48,6 +48,10 @@ Boston, MA 02111-1307, USA. * ../etc/gnuserv.README relative to the directory containing this file) */ +#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; @@ -189,50 +193,44 @@ filename_expand (char *fullpath, char *filename) /* 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 ":" - to "///". */ - 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 */ @@ -334,11 +332,11 @@ main (int argc, char *argv[]) char *remotearg; char thishost[HOSTNAMSZ]; /* this hostname */ char remotepath[MAXPATHLEN+1]; /* remote pathname */ - char *path; int rflg = 0; /* pathname given on cmdline */ char *portarg; 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 */ @@ -444,7 +442,7 @@ main (int argc, char *argv[]) break; case 'r': GET_ARGUMENT (remotearg, "-r"); - strcpy (remotepath, remotearg); + strncpy (remotepath, remotearg, MAXPATHLEN); rflg = 1; break; #endif /* INTERNET_DOMAIN_SOCKETS */ @@ -475,13 +473,14 @@ main (int argc, char *argv[]) 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) { @@ -573,7 +572,7 @@ main (int argc, char *argv[]) } /* 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 */ @@ -598,7 +597,7 @@ main (int argc, char *argv[]) * 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)