Fix up osdfunc_exec()

git-svn-id: https://svn.eduke32.com/eduke32@7152 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
terminx 2018-11-18 18:06:01 +00:00
parent 60e9bca926
commit eb81507565

View file

@ -164,41 +164,42 @@ int OSD_Exec(const char *szScript)
{ {
int err = 0; int err = 0;
int32_t handle, len = 0; int32_t handle, len = 0;
char *buf = NULL;
if ((handle = kopen4load(szScript, 0)) == -1) if ((handle = kopen4load(szScript, 0)) == -1)
err = 1; err = 1;
else if ((len = kfilelength(handle)) <= 0) else if ((len = kfilelength(handle)) <= 0)
err = 2; // blank file err = 2; // blank file
else if ((buf = (char *) Xmalloc(len + 1)) == NULL)
err = 3;
if (!err || err == 3) if (!err)
OSD_Printf("Executing \"%s\"\n", szScript); OSD_Printf("Executing \"%s\"\n", szScript);
auto buf = (char *) Xmalloc(len + 1);
if (err || kread(handle, buf, len) != len) if (err || kread(handle, buf, len) != len)
{ {
if (!err || err == 3) // no error message for blank file if (err != 2) // no error message for blank file
OSD_Printf("Error executing \"%s\"!\n", szScript); OSD_Printf("Error executing \"%s\"!\n", szScript);
if (handle != -1) kclose(handle);
if (handle != -1)
kclose(handle);
Bfree(buf); Bfree(buf);
return 1; return 1;
} }
kclose(handle); kclose(handle);
buf[len] = '\0';
buf[len] = 0;
osd->execdepth++;
char const *cp = strtok(buf, "\r\n"); char const *cp = strtok(buf, "\r\n");
++osd->execdepth;
while (cp != NULL) while (cp != NULL)
{ {
OSD_Dispatch(cp); OSD_Dispatch(cp);
cp = strtok(NULL, "\r\n"); cp = strtok(NULL, "\r\n");
} }
--osd->execdepth;
osd->execdepth--;
Bfree(buf); Bfree(buf);
return 0; return 0;
} }
@ -251,12 +252,8 @@ static int osdfunc_exec(osdfuncparm_t const * const parm)
if (parm->numparms != 1) if (parm->numparms != 1)
return OSDCMD_SHOWHELP; return OSDCMD_SHOWHELP;
char fn[BMAX_PATH]; if (OSD_Exec(parm->parms[0]))
OSD_Printf("%sexec: file \"%s\" not found.\n", osd->draw.errorfmt, parm->parms[0]);
Bstrcpy(fn,parm->parms[0]);
if (OSD_Exec(fn))
OSD_Printf("%sexec: file \"%s\" not found.\n", osd->draw.errorfmt, fn);
return OSDCMD_OK; return OSDCMD_OK;
} }