carbon2-commit: Winclient updates
Vin Shelton
acs at xemacs.org
Fri Mar 5 12:47:06 EST 2010
changeset: 5080:422b4b4fb2a6
user: Vin Shelton <acs at xemacs.org>
date: Thu Feb 11 19:33:50 2010 -0500
files: lib-src/ChangeLog lib-src/winclient.c nt/ChangeLog nt/xemacs.mak
description:
Winclient updates
diff -r acf7d1bc0490 -r 422b4b4fb2a6 lib-src/ChangeLog
--- a/lib-src/ChangeLog Wed Feb 10 23:15:40 2010 +0900
+++ b/lib-src/ChangeLog Thu Feb 11 19:33:50 2010 -0500
@@ -1,3 +1,14 @@
+2010-02-11 Vin Shelton <acs at xemacs.org>
+
+ * winclient.c: Bump connection retries to 20 because some people
+ have long startup files.
+ (openConversation): If CreateProcess cannot find
+ xemacs.exe, try again with the name of the version-specific
+ executable. This is useful because the cygwin version of XEmacs
+ doesn't install an xemacs.exe executable.
+ (parseCommandLine): Fix tracker issue 675 - add current directory
+ to filenames under cygwin.
+
2010-01-26 Ben Wing <ben at xemacs.org>
* make-msgfile.lex: Vague hacking on this file, insert a comment
diff -r acf7d1bc0490 -r 422b4b4fb2a6 lib-src/winclient.c
--- a/lib-src/winclient.c Wed Feb 10 23:15:40 2010 +0900
+++ b/lib-src/winclient.c Thu Feb 11 19:33:50 2010 -0500
@@ -32,6 +32,11 @@
#include <ctype.h>
#include <errno.h>
+#ifdef __CYGWIN__
+#include <stdlib.h>
+#include <unistd.h>
+#endif
+
static void error (const char* s1, const char* s2);
static void fatal (const char *s1, const char *s2);
static void * xmalloc (size_t size);
@@ -40,7 +45,7 @@
/* -- Post-Include Defines -------------------------------------------------- */
/* Timeouts & delays */
-#define CONNECT_RETRIES 10
+#define CONNECT_RETRIES 20
#define CONNECT_DELAY 500 /* ms */
#define TRANSACTION_TIMEOUT 5000 /* ms */
#define MAX_INPUT_IDLE_WAIT INFINITE /* ms */
@@ -51,7 +56,8 @@
#define COMMAND_FORMAT "[open(\"%s%s\")]"
/* XEmacs program name */
-#define PROGRAM_TO_RUN "xemacs.exe"
+#define GENERIC_PROGRAM EMACS_PROGNAME ".exe"
+#define VERSIONED_PROGRAM EMACS_PROGNAME "-" EMACS_VERSION ".exe"
/* -- Constants ------------------------------------------------------------- */
@@ -107,7 +113,7 @@
HCONV hConv;
int ret = 0;
UINT uiRet;
-
+
/* Initialise the DDEML library */
uiRet = DdeInitialize (&idInst,
(PFNCALLBACK) ddeCallback,
@@ -134,7 +140,7 @@
/* Close the conversation */
closeConversation (hConv);
}
-
+
DdeUninitialize (idInst);
return ret;
@@ -164,7 +170,7 @@
goto error;
}
-
+
/* Get the topic name */
hszTopic = DdeCreateStringHandle (idInst,
TOPIC_NAME,
@@ -186,11 +192,13 @@
STARTUPINFO sti;
PROCESS_INFORMATION pi;
int n;
-
+
/* Try to start the program */
ZeroMemory (&sti, sizeof (sti));
sti.cb = sizeof (sti);
- if (!CreateProcess (NULL, PROGRAM_TO_RUN, NULL, NULL, FALSE, 0,
+ if (!CreateProcess (NULL, GENERIC_PROGRAM, NULL, NULL, FALSE, 0,
+ NULL, NULL, &sti, &pi) &&
+ !CreateProcess (NULL, VERSIONED_PROGRAM, NULL, NULL, FALSE, 0,
NULL, NULL, &sti, &pi))
{
MessageBox (NULL, "Could not start process.",
@@ -205,12 +213,12 @@
/* Close the handles */
CloseHandle (pi.hThread);
CloseHandle (pi.hProcess);
-
+
/* Try to connect */
for (n = 0; n < CONNECT_RETRIES; n++)
{
Sleep (CONNECT_DELAY);
-
+
hConv = DdeConnect (idInst, hszService, hszTopic, NULL);
if (hConv)
@@ -232,7 +240,7 @@
DdeFreeStringHandle (idInst, hszTopic);
return hConv;
-
+
error:
if (hConv)
DdeDisconnect (hConv);
@@ -268,11 +276,11 @@
{
char *buf = NULL;
unsigned len;
-
+
/* Calculate the buffer length */
len = strlen (lpszFileName1) + strlen (lpszFileName2)
+ strlen (COMMAND_FORMAT);
-
+
/* Allocate a buffer */
buf = (char *) xmalloc (len);
@@ -286,15 +294,14 @@
/* Build the command */
len = wsprintf (buf, COMMAND_FORMAT, lpszFileName1, lpszFileName2);
+ len++;
- len++;
-
/* OK. We're connected. Send the message. */
DdeClientTransaction (buf, len, hConv, NULL,
0, XTYP_EXECUTE, TRANSACTION_TIMEOUT, NULL);
free (buf);
-
+
return 0;
}
@@ -319,14 +326,14 @@
/* If this is the end, return NULL */
if (!*p)
return NULL;
-
+
/* Remember where we are */
start = p;
-
+
/* Find the next whitespace character outside quotes */
if (*p == '"')
all_in_quotes = 1;
-
+
while (*p && !quit)
{
switch (*p)
@@ -339,7 +346,7 @@
case '\\':
if (!in_quotes)
all_in_quotes = 0;
-
+
p++;
if (!*p)
@@ -368,13 +375,13 @@
start++;
length -= 2;
}
-
+
/* Copy */
buf = (char *) xmalloc (length + 1);
if (!buf)
return NULL;
-
+
strncpy (buf, start, length);
buf[length] = '\0';
@@ -405,6 +412,38 @@
/* Retrieve arguments */
while ((arg = getNextArg ((const char**)&lpszCommandLine, &len)) != NULL)
{
+ fullpath = NULL;
+#ifdef __CYGWIN__
+ /* If the filename is not an absolute path,
+ add the current directory to the pathname */
+ if (*arg != '/')
+ {
+ len = pathconf(".", _PC_PATH_MAX);
+ fullpath = (char *) xmalloc (len+1);
+ if (!fullpath)
+ {
+ MessageBox (NULL, "Not enough memory.", "winclient",
+ MB_ICONEXCLAMATION | MB_OK);
+ ret = 1;
+ break;
+ }
+ if (!getcwd(fullpath, (size_t)len))
+ {
+ MessageBox (NULL, "Could not retrieve current directory.",
+ "winclient", MB_ICONEXCLAMATION | MB_OK);
+ ret = 1;
+ break;
+ }
+ /* Append trailing slash */
+ strcat(fullpath, "/");
+ ret = doFile (hConv, fullpath, arg);
+ }
+ else
+ {
+ /* The arg has already been expanded, so pass it as it is */
+ ret = doFile (hConv, "", arg);
+ }
+#else
/* First find the canonical path name */
fullpath = filepart = NULL;
pathlen = GetFullPathName (arg, 0, fullpath, &filepart);
@@ -415,10 +454,7 @@
{
MessageBox (NULL, "Not enough memory.", "winclient",
MB_ICONEXCLAMATION | MB_OK);
-
ret = 1;
- free (arg);
-
break;
}
@@ -448,9 +484,10 @@
FindClose (hFindFile);
}
-
+#endif
/* Release the path name buffers */
- free (fullpath);
+ if (fullpath)
+ free (fullpath);
free (arg);
if (ret)
diff -r acf7d1bc0490 -r 422b4b4fb2a6 nt/ChangeLog
--- a/nt/ChangeLog Wed Feb 10 23:15:40 2010 +0900
+++ b/nt/ChangeLog Thu Feb 11 19:33:50 2010 -0500
@@ -1,3 +1,8 @@
+2010-02-11 Vin Shelton <acs at xemacs.org>
+
+ * xemacs.mak (LIB_SRC_DEFINES): Added PROGRAM_DEFINES to lib_src
+ compilation options so winclient.c can see them.
+
2010-02-03 Jerry James <james at xemacs.org>
* xemacs.rc: Add license and copyright boilerplate text for Jonathan
diff -r acf7d1bc0490 -r 422b4b4fb2a6 nt/xemacs.mak
--- a/nt/xemacs.mak Wed Feb 10 23:15:40 2010 +0900
+++ b/nt/xemacs.mak Thu Feb 11 19:33:50 2010 -0500
@@ -1065,7 +1065,7 @@
###################### lib-src programs
-LIB_SRC_DEFINES = -DHAVE_CONFIG_H -DWIN32_NATIVE
+LIB_SRC_DEFINES = -DHAVE_CONFIG_H -DWIN32_NATIVE $(PROGRAM_DEFINES)
#
# Creating config.values to be used by config.el
More information about the XEmacs-Patches
mailing list