diff --git a/src/frontend/inp.c b/src/frontend/inp.c index 3916b8c4d..05ac82d9d 100644 --- a/src/frontend/inp.c +++ b/src/frontend/inp.c @@ -1590,15 +1590,26 @@ com_source(wordlist *wl) if ((fp = inp_pathopen(tempfile, "w+")) == NULL) { perror(tempfile); cp_interactive = TRUE; - return; + /* If we cannot open the temporary file, stop all further command execution */ +#ifdef SHARED_MODULE + controlled_exit(1); +#else + cp_evloop(NULL); +#endif } while (wl) { if ((tp = inp_pathopen(wl->wl_word, "r")) == NULL) { + fprintf(cp_err, "Command 'source' failed:\n"); perror(wl->wl_word); fclose(fp); cp_interactive = TRUE; unlink(tempfile); - return; + /* If we cannot source the file, stop all further command execution */ +#ifdef SHARED_MODULE + controlled_exit(1); +#else + cp_evloop(NULL); +#endif } while ((n = fread(buf, 1, BSIZE_SP, tp)) > 0) fwrite(buf, 1, n, fp); @@ -1611,8 +1622,15 @@ com_source(wordlist *wl) } if (fp == NULL) { + fprintf(cp_err, "Command 'source' failed:\n"); perror(wl->wl_word); cp_interactive = TRUE; + /* If we cannot source the file, stop all further command execution */ +#ifdef SHARED_MODULE + controlled_exit(1); +#else + cp_evloop(NULL); +#endif return; }