39
39
#include < algorithm>
40
40
41
41
#ifdef WIN32
42
- # define mkdir (dir, access ) mkdir(dir)
42
+ # include < io.h>
43
+ # include < direct.h>
44
+ # define mkdir (dir, access ) _mkdir(dir)
43
45
# define COPY_CMD " copy"
44
46
# define CMD_SEP " &"
45
47
#else
@@ -124,7 +126,16 @@ look_for_writable_texdir(const char *path_variable, bool create)
124
126
static void
125
127
find_writable_texdir (ErrorHandler *errh, const char *)
126
128
{
127
- look_for_writable_texdir (" $TEXMFVAR" , true );
129
+ // Check if TEXMFVAR is writable.
130
+ // Some distributions like W32TeX do not have TEXMFVAR defined,
131
+ // in which case we check TEXMFLOCAL.
132
+ char *p = kpsei_var_value (" TEXMFVAR" );
133
+ if (p == NULL )
134
+ look_for_writable_texdir (" $TEXMFLOCAL" , true );
135
+ else {
136
+ free (p);
137
+ look_for_writable_texdir (" $TEXMFVAR" , true );
138
+ }
128
139
if (!writable_texdir)
129
140
look_for_writable_texdir (" $VARTEXMF" , false );
130
141
if (!writable_texdir)
@@ -313,7 +324,7 @@ update_odir(int o, String file, ErrorHandler *errh)
313
324
String ls_r = writable_texdir + " ls-R" ;
314
325
bool success = false ;
315
326
if (access (ls_r.c_str (), R_OK) >= 0 ) // make sure it already exists
316
- if (FILE *f = fopen (ls_r.c_str (), " a " )) {
327
+ if (FILE *f = fopen (ls_r.c_str (), " ab " )) {
317
328
fprintf (f, " ./%s:\n %s\n " , directory.c_str (), file.c_str ());
318
329
success = true ;
319
330
fclose (f);
@@ -323,7 +334,11 @@ update_odir(int o, String file, ErrorHandler *errh)
323
334
if (!success && writable_texdir.find_left (' \' ' ) < 0 && directory.find_left (' \' ' ) < 0 && file.find_left (' \' ' ) < 0 ) {
324
335
// look for mktexupd script
325
336
if (!mktexupd_tried) {
337
+ #ifdef _WIN32
338
+ mktexupd = " mktexupd.exe" ;
339
+ #else
326
340
mktexupd = kpsei_string (kpsei_find_file (" mktexupd" , KPSEI_FMT_WEB2C));
341
+ #endif
327
342
mktexupd_tried = true ;
328
343
}
329
344
@@ -677,7 +692,7 @@ update_autofont_map(const String &fontname, String mapline, ErrorHandler *errh)
677
692
#endif
678
693
{
679
694
fclose (f);
680
- f = fopen (map_file.c_str (), " w " );
695
+ f = fopen (map_file.c_str (), " wb " );
681
696
fd = fileno (f);
682
697
}
683
698
0 commit comments