W32TeX [2014/01/15] を使用しています.
W32TeX の texworkswrapper でスペースを含むファイル名を指定して
texworks "a b c.pdf"
を実行すると 「texworks.exe は動作を停止しました」 と表示されます.
texworks \"a b c.pdf\"
とすると回避できます.
texworks "a b c.pdf" の場合は
argv[1] が "a b c.pdf"
となるのに対して
texworks \"a b c.pdf\" の場合は
argv[1] が "a
argv[2] が b
argv[3] が c.pdf"
となりスペースが含まれない引数として処理されたためと思われます.
texworks.c を見ると
スペースが含まれる引数の場合に
malloc で確保した領域の先頭アドレスではなく
main 関数の argv[i] の先頭アドレスに対して
free を使用としているのが原因だと思われます.
malloc ではなく以下のように alloca を使用すれば
free をしなくてもよくなるのではないでしょうか?
$ diff -urN texworks.c texworksfix.c
--- texworks.c 2012-01-06 07:48:57 +0900
+++ texworksfix.c 2014-01-29 03:29:19 +0900
@@ -25,11 +25,13 @@
for(i = 0; i < argc; i++) {
if(is_include_space(argv[i])) {
- p = (char *)malloc(strlen(argv[i])+3);
+#if defined _MSC_VER
+#define alloca _alloca
+#endif
+ p = (char *)alloca(strlen(argv[i])+3);
strcpy(p, "\"");
strcat(p, argv[i]);
strcat(p, "\"");
- free(argv[i]);
argv[i] = p;
}
}