cpitf.c; allow spaces in paths like "Program Files" as search path for spinit if in MS Windows

This commit is contained in:
h_vogt 2016-10-30 08:56:28 +01:00 committed by rlar
parent 064b2f790c
commit 6f10c9f818
1 changed files with 18 additions and 4 deletions

View File

@ -242,10 +242,8 @@ ft_cpinit(void)
wl_free(wl);
}
/* Now source the standard startup file spinit or tclspinit. */
/* set variables to read program configuration into spinit for VS */
#ifdef _MSC_VER
/* set variables to read program configuration into spinit for VS */
#ifdef CONFIG64
#ifdef NGDEBUG
cp_vset("pg_config", CP_STRING, "d64");
@ -261,15 +259,31 @@ ft_cpinit(void)
#endif
#endif
/* jump over leading spaces */
/* Now source the standard startup file spinit or tclspinit. */
for (copys = s = cp_tildexpand(Lib_Path); copys && *copys; ) {
/* jump over leading spaces */
s = skip_ws(s);
#ifdef OUTDEBUG
printf("cpitf.c, spinit path is %s\n", s);
#endif
#if defined(_MSC_VER) || defined(__MINGW32__) || defined(HAS_WINGUI)
/* MS Windows allows path names with spaces, e.g. "Program Files".
The old code below does not do then.
So just copy the whole string s into buf */
size_t sl = strlen(s);
if (sl >= BSIZE_SP) {
fprintf(cp_err, "Note: Cannot evaluate spinit, path is too long!\n");
tcap_init();
return;
}
size_t ii = 0;
for (r = buf; *s && ii < sl; r++, s++, ii++)
*r = *s;
#else
/* copy s into buf until space is seen, r is the actual position */
for (r = buf; *s && !isspace_c(*s); r++, s++)
*r = *s;
#endif
tfree(copys);
/* add a path separator to buf at actual position */
(void) strcpy(r, DIR_PATHSEP);