From: cuz Date: Wed, 22 May 2002 08:30:06 +0000 (+0000) Subject: Renamed spawn.c -> spawn-unix.c X-Git-Tag: V2.12.0~2340 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=67ebea8efae8e193b85cbbc1046702eb7c1d292a;p=cc65 Renamed spawn.c -> spawn-unix.c Added spawn-amiga.c git-svn-id: svn://svn.cc65.org/cc65/trunk@1282 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/src/cl65/make/gcc.mak b/src/cl65/make/gcc.mak index 111e07683..96f9a2b91 100644 --- a/src/cl65/make/gcc.mak +++ b/src/cl65/make/gcc.mak @@ -13,7 +13,7 @@ LDFLAGS= OBJS = error.o \ global.o \ main.o \ - spawn.o + spawn-unix.o LIBS = $(COMMON)/common.a diff --git a/src/cl65/spawn-amiga.c b/src/cl65/spawn-amiga.c new file mode 100644 index 000000000..841b953d3 --- /dev/null +++ b/src/cl65/spawn-amiga.c @@ -0,0 +1,81 @@ +/*****************************************************************************/ +/* */ +/* spawn-amiga.c */ +/* */ +/* Execute other external programs (Amiga version) */ +/* */ +/* */ +/* */ +/* (C) 2002 Wolfgang Hosemann */ +/* EMail: whose@t-online.de */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include +#include + +/* common */ +#include "attrib.h" +#include "strbuf.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +int spawnvp (int Mode attribute ((unused)), + const char* File attribute ((unused)), + char* const argv []) +/* Execute the given program searching and wait til it terminates. The Mode + * argument is ignored (compatibility only). The result of the function is + * the return code of the program. The function will terminate the program + * on errors. + */ +{ + int Status; + StrBuf Command = AUTO_STRBUF_INITIALIZER; + + /* Build the command line */ + while (*argv) { + SB_AppendStr (&Command, *argv++); + SB_AppendChar (&Command, ' '); + } + + /* Terminate the command line */ + SB_Terminate (&Command); + + /* Invoke the shell to execute the command */ + Status = System (SB->GetConstBuf (&Command), TAG_END) + + /* Free the string buf data */ + DoneStrBuf (&Command); + + /* Return the result */ + return Status; +} + + + diff --git a/src/cl65/spawn-unix.c b/src/cl65/spawn-unix.c new file mode 100644 index 000000000..be25e66a0 --- /dev/null +++ b/src/cl65/spawn-unix.c @@ -0,0 +1,99 @@ +/*****************************************************************************/ +/* */ +/* spawn.c */ +/* */ +/* Execute other external programs (Unix version) */ +/* */ +/* */ +/* */ +/* (C) 1999 Ullrich von Bassewitz */ +/* Wacholderweg 14 */ +/* D-70597 Stuttgart */ +/* EMail: uz@musoftware.de */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include +#include +#include +#include +#include + +/* common */ +#include "attrib.h" + +/* cl65 */ +#include "error.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +int spawnvp (int Mode attribute ((unused)), const char* File, char* const argv []) +/* Execute the given program searching and wait til it terminates. The Mode + * argument is ignored (compatibility only). The result of the function is + * the return code of the program. The function will terminate the program + * on errors. + */ +{ + int Status = 0; + + /* Fork */ + int pid = fork (); + if (pid < 0) { + + /* Error forking */ + Error ("Cannot fork: %s", strerror (errno)); + + } else if (pid == 0) { + + /* The son - exec the program */ + if (execvp (File, argv) < 0) { + Error ("Cannot exec `%s': %s", File, strerror (errno)); + } + + } else { + + /* The father: Wait for the subprocess to terminate */ + if (waitpid (pid, &Status, 0) < 0) { + Error ("Failure waiting for subprocess: %s", strerror (errno)); + } + + /* Examine the child status */ + if (!WIFEXITED (Status)) { + Error ("Subprocess `%s' aborted by signal %d", File, WTERMSIG (Status)); + } + } + + /* Only the father goes here, we place a return here regardless of that + * to avoid compiler warnings. + */ + return WEXITSTATUS (Status); +} + + + diff --git a/src/cl65/spawn.c b/src/cl65/spawn.c deleted file mode 100644 index 19e0aebd3..000000000 --- a/src/cl65/spawn.c +++ /dev/null @@ -1,99 +0,0 @@ -/*****************************************************************************/ -/* */ -/* spawn.c */ -/* */ -/* Execute other external programs */ -/* */ -/* */ -/* */ -/* (C) 1999 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ -/* */ -/* */ -/* This software is provided 'as-is', without any expressed or implied */ -/* warranty. In no event will the authors be held liable for any damages */ -/* arising from the use of this software. */ -/* */ -/* Permission is granted to anyone to use this software for any purpose, */ -/* including commercial applications, and to alter it and redistribute it */ -/* freely, subject to the following restrictions: */ -/* */ -/* 1. The origin of this software must not be misrepresented; you must not */ -/* claim that you wrote the original software. If you use this software */ -/* in a product, an acknowledgment in the product documentation would be */ -/* appreciated but is not required. */ -/* 2. Altered source versions must be plainly marked as such, and must not */ -/* be misrepresented as being the original software. */ -/* 3. This notice may not be removed or altered from any source */ -/* distribution. */ -/* */ -/*****************************************************************************/ - - - -#include -#include -#include -#include -#include - -/* common */ -#include "attrib.h" - -/* cl65 */ -#include "error.h" - - - -/*****************************************************************************/ -/* Code */ -/*****************************************************************************/ - - - -int spawnvp (int Mode attribute ((unused)), const char* File, char* const argv []) -/* Execute the given program searching and wait til it terminates. The Mode - * argument is ignored (compatibility only). The result of the function is - * the return code of the program. The function will terminate the program - * on errors. - */ -{ - int Status = 0; - - /* Fork */ - int pid = fork (); - if (pid < 0) { - - /* Error forking */ - Error ("Cannot fork: %s", strerror (errno)); - - } else if (pid == 0) { - - /* The son - exec the program */ - if (execvp (File, argv) < 0) { - Error ("Cannot exec `%s': %s", File, strerror (errno)); - } - - } else { - - /* The father: Wait for the subprocess to terminate */ - if (waitpid (pid, &Status, 0) < 0) { - Error ("Failure waiting for subprocess: %s", strerror (errno)); - } - - /* Examine the child status */ - if (!WIFEXITED (Status)) { - Error ("Subprocess `%s' aborted by signal %d", File, WTERMSIG (Status)); - } - } - - /* Only the father goes here, we place a return here regardless of that - * to avoid compiler warnings. - */ - return WEXITSTATUS (Status); -} - - -