diff options
author | Ian C <ianc@noddybox.co.uk> | 2011-06-09 13:46:28 +0000 |
---|---|---|
committer | Ian C <ianc@noddybox.co.uk> | 2011-06-09 13:46:28 +0000 |
commit | a9022b5972dc49d86f617a27940fafe9c4d0e7e7 (patch) | |
tree | 61405aa4ade91ed1057f863ddf118ceb38e14f8e /linux/runcmd.c |
Initial import of (very old) vidoom sources.
Diffstat (limited to 'linux/runcmd.c')
-rw-r--r-- | linux/runcmd.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/linux/runcmd.c b/linux/runcmd.c new file mode 100644 index 0000000..bea822b --- /dev/null +++ b/linux/runcmd.c @@ -0,0 +1,82 @@ +/* + + viDOOM - level editor for DOOM + + Copyright (C) 2000 Ian Cowburn (ianc@noddybox.demon.co.uk) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + ------------------------------------------------------------------------- + + Command execution interface + +*/ +static const char rcs_id[]="$Id$"; + +#include "config.h" +#include "mem.h" + +#include <unistd.h> +#include <stdio.h> + +#define MAX_CMDSIZE 8192 + +static void Write(int fd, char *p) +{ + /* Should really do a loopy proper one... + */ + write(fd,p,strlen(p)); +} + + +int RunCommand(char *argv[], char *path) +{ + FILE *fp; + int output; + int f; + char buff[MAX_CMDSIZE]; + + f=0; + buff[0]=0; + + while(argv[f]) + { + strcat(buff,argv[f++]); + strcat(buff," "); + } + + strcpy(path,"vidoomXXXXXX"); + + if ((output=mkstemp(path))==-1) + return FALSE; + + if (!(fp=popen(buff,"r"))) + return FALSE; + + fgets(buff,sizeof buff,fp); + + while(!feof(fp)) + { + Write(output,buff); + fgets(buff,sizeof buff,fp); + } + + /* Assume that non-zero is error + */ + return pclose(fp)==0; +} + + +/* END OF FILE */ |