mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-28 07:45:00 +00:00
(CHOOSE_NEWEST_EXE): New parameter macro.
Not defined by default. (WinMain): Add conditional testing CHOOSE_NEWEST_EXE. (WinMain): Convert backslashes to slashes in env var values.
This commit is contained in:
parent
4302ef5010
commit
662463d904
@ -5,6 +5,21 @@
|
||||
use Emacs in windowing (GUI) mode, and will not want to have an extra
|
||||
console window lying around. */
|
||||
|
||||
/*
|
||||
You may want to define this if you want to be able to install updated
|
||||
emacs binaries even when other users are using the current version.
|
||||
The problem with some file servers (notably Novell) is that an open
|
||||
file cannot be overwritten, deleted, or even renamed. So if someone
|
||||
is running emacs.exe already, you cannot install a newer version.
|
||||
By defining CHOOSE_NEWEST_EXE, you can name your new emacs.exe
|
||||
something else which matches "emacs*.exe", and runemacs will
|
||||
automatically select the newest emacs executeable in the bin directory.
|
||||
(So you'll probably be able to delete the old version some hours/days
|
||||
later).
|
||||
*/
|
||||
|
||||
/* #define CHOOSE_NEWEST_EXE */
|
||||
|
||||
#define WIN32
|
||||
|
||||
#include <windows.h>
|
||||
@ -20,8 +35,8 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
|
||||
PROCESS_INFORMATION child;
|
||||
int wait_for_child = FALSE;
|
||||
DWORD ret_code = 0;
|
||||
char * new_cmdline;
|
||||
char * p;
|
||||
char *new_cmdline;
|
||||
char *p;
|
||||
char modname[MAX_PATH];
|
||||
|
||||
if (!GetModuleFileName (NULL, modname, MAX_PATH))
|
||||
@ -32,23 +47,58 @@ WinMain (HINSTANCE hSelf, HINSTANCE hPrev, LPSTR cmdline, int nShow)
|
||||
|
||||
new_cmdline = alloca (MAX_PATH + strlen (cmdline) + 1);
|
||||
strcpy (new_cmdline, modname);
|
||||
strcat (new_cmdline, "\\emacs.exe ");
|
||||
|
||||
/* append original arguments if any; first look for -wait as first
|
||||
argument, and apply that ourselves */
|
||||
if (strncmp (cmdline, "-wait", 5) == 0)
|
||||
#ifdef CHOOSE_NEWEST_EXE
|
||||
{
|
||||
wait_for_child = TRUE;
|
||||
cmdline += 5;
|
||||
/* Silly hack to allow new versions to be installed on
|
||||
server even when current version is in use. */
|
||||
|
||||
char * best_name = alloca (MAX_PATH + 1);
|
||||
FILETIME best_time = {0,0};
|
||||
WIN32_FIND_DATA wfd;
|
||||
HANDLE fh;
|
||||
p = new_cmdline + strlen (new_cmdline);
|
||||
strcpy (p, "\\emacs*.exe");
|
||||
fh = FindFirstFile (new_cmdline, &wfd);
|
||||
if (fh == INVALID_HANDLE_VALUE)
|
||||
goto error;
|
||||
do
|
||||
{
|
||||
if (wfd.ftLastWriteTime.dwHighDateTime > best_time.dwHighDateTime
|
||||
|| (wfd.ftLastWriteTime.dwHighDateTime == best_time.dwHighDateTime
|
||||
&& wfd.ftLastWriteTime.dwLowDateTime > best_time.dwLowDateTime))
|
||||
{
|
||||
best_time = wfd.ftLastWriteTime;
|
||||
strcpy (best_name, wfd.cFileName);
|
||||
}
|
||||
}
|
||||
while (FindNextFile (fh, &wfd));
|
||||
FindClose (fh);
|
||||
*p++ = '\\';
|
||||
strcpy (p, best_name);
|
||||
strcat (p, " ");
|
||||
}
|
||||
#else
|
||||
strcat (new_cmdline, "\\emacs.exe");
|
||||
#endif
|
||||
|
||||
/* Append original arguments if any; first look for -wait as first
|
||||
argument, and apply that ourselves. */
|
||||
if (strncmp (cmdline, "-wait", 5) == 0)
|
||||
{
|
||||
wait_for_child = TRUE;
|
||||
cmdline += 5;
|
||||
}
|
||||
strcat (new_cmdline, cmdline);
|
||||
|
||||
/* set emacs_dir variable if runemacs was in "%emacs_dir%\bin" */
|
||||
/* Set emacs_dir variable if runemacs was in "%emacs_dir%\bin". */
|
||||
if ((p = strrchr (modname, '\\')) && stricmp (p, "\\bin") == 0)
|
||||
{
|
||||
*p = 0;
|
||||
SetEnvironmentVariable ("emacs_dir", modname);
|
||||
}
|
||||
{
|
||||
*p = 0;
|
||||
for (p = modname; *p; p++)
|
||||
if (*p == '\\') *p = '/';
|
||||
SetEnvironmentVariable ("emacs_dir", modname);
|
||||
}
|
||||
|
||||
memset (&start, 0, sizeof (start));
|
||||
start.cb = sizeof (start);
|
||||
|
Loading…
Reference in New Issue
Block a user