From e71fa90f1c14bb82acbb04b7229a5439f2a2d262 Mon Sep 17 00:00:00 2001 From: h_vogt Date: Sun, 30 Oct 2016 08:56:28 +0100 Subject: [PATCH] cpitf.c; allow spaces in paths like "Program Files" as search path for spinit if in MS Windows --- src/frontend/cpitf.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/frontend/cpitf.c b/src/frontend/cpitf.c index 664a4189f..dfd4a474e 100644 --- a/src/frontend/cpitf.c +++ b/src/frontend/cpitf.c @@ -265,16 +265,30 @@ ft_cpinit(void) } /* Now source the standard startup file spinit or tclspinit. */ - - /* jump over leading spaces */ 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);