diff src/process-nt.c @ 2526:902d5bd9b75c

[xemacs-hg @ 2005-01-28 02:36:11 by ben] Support symlinks under Windows nt.c, fileio.c: Fix sync comments. config.h.in, dired-msw.c, emacs.c, event-msw.c, fileio.c, glyphs.c, lisp.h, nt.c, process-nt.c, realpath.c, sound.c, symsinit.h, sysdep.c, sysfile.h, syswindows.h, win32.c: Add support for treating shortcuts under Windows as symbolic links. Enabled with mswindows-shortcuts-are-links (t by default). Rewrite lots of places to use PATHNAME_CONVERT_OUT, which is moved to sysfile.h. Add PATHNAME_RESOLVE_LINKS, which only does things under Windows. Add profiling section for expand_file_name calls. nt.c, sysdep.c: Unicode-ize. realpath.c: Renamed from readlink_and_correct_case. Fix some problems with Windows implementation due to incorrect understanding of workings of the function. sound.c, ntplay.c, sound.h: Rename play_sound_file to nt_play_sound_file and pass internally-formatted data to it to avoid converting out and back again. text.h: is_c -> is_ascii.
author ben
date Fri, 28 Jan 2005 02:36:28 +0000
parents 3d8143fc88e1
children 19a72041c5ed 623d57b7fbe8
line wrap: on
line diff
--- a/src/process-nt.c	Fri Jan 28 02:05:05 2005 +0000
+++ b/src/process-nt.c	Fri Jan 28 02:36:28 2005 +0000
@@ -764,13 +764,15 @@
     if (mswindows_is_executable (XSTRING_DATA (program)))
       {
 	Extbyte *progext;
-	LISP_STRING_TO_TSTR (program, progext);
+	LISP_PATHNAME_CONVERT_OUT (program, progext);
 	image_type = qxeSHGetFileInfo (progext, 0, NULL, 0, SHGFI_EXETYPE);
       }
     else
       {
 	DECLARE_EISTRING (progext);
-	eicpy_lstr (progext, program);
+	Ibyte *prog2;
+	LISP_PATHNAME_RESOLVE_LINKS (program, prog2);
+	eicpy_rawz (progext, prog2);
 	eicat_ascii (progext, ".exe");
 	eito_external (progext, Qmswindows_tstr);
 	image_type = qxeSHGetFileInfo (eiextdata (progext), 0, NULL, 0,
@@ -858,6 +860,7 @@
 	("Bogus return value from `mswindows-construct-process-command-line'",
 	 args_or_ret);
 
+    /* #### What about path names, which may be links? */
     LISP_STRING_TO_TSTR (args_or_ret, command_line);
 
     UNGCPRO; /* args_or_ret */
@@ -994,7 +997,7 @@
     {
       Extbyte *curdirext;
 
-      LISP_STRING_TO_TSTR (cur_dir, curdirext);
+      LISP_PATHNAME_CONVERT_OUT (cur_dir, curdirext);
 
       err = (qxeCreateProcess (NULL, command_line, NULL, NULL, TRUE,
 			       (XEUNICODE_P ?