コード例 #1
0
ファイル: rpc_main.c プロジェクト: AhmadTux/DragonFlyBSD
/*
 * Open input file with given define for C-preprocessor
 */
static void
open_input(const char *infile, const char *define)
{
	int pd[2];
	int usevp;

	infilename = (infile == NULL) ? "<stdin>" : infile;
	pipe(pd);
	switch (childpid = fork()) {
	case 0:
		usevp = find_cpp();
		putarg(0, CPP);
		putarg(1, CPPFLAGS);
		addarg(define);
		if (infile)
			addarg(infile);
		addarg(NULL);
		close(1);
		dup2(pd[1], 1);
		close(pd[0]);
		if (usevp)
		    execvp(arglist[0], arglist);
		else
		    execv(arglist[0], arglist);
		err(1, "execv(%s)", arglist[0]);
	case -1:
		err(1, "fork");
	}
	close(pd[1]);
	fin = fdopen(pd[0], "r");
	if (fin == NULL) {
		warn("%s", infilename);
		crash();
	}
}
コード例 #2
0
ファイル: rpc_main.c プロジェクト: Distrotech/nfs-utils
/*
 * Open input file with given define for C-preprocessor 
 */
static void
open_input(char *infile, char *define)
{
	int pd[2];

	infilename = (infile == NULL) ? "<stdin>" : infile;
	(void) pipe(pd);
	switch (fork()) {
	case 0:
		putarg(0, "cpp");
		putarg(1, CPPFLAGS);
		addarg(define);
		addarg(infile);
		addarg((char *)NULL);
		(void) close(1);
		(void) dup2(pd[1], 1);
		(void) close(pd[0]);
		if (cppDefined)
			execv(CPP, arglist);
		else {
			execvp("cpp", arglist);
			if (errno == ENOENT)
				execvp(SVR4_CPP, arglist);
			if (errno == ENOENT)
				execvp(SUNOS_CPP, arglist);
		}
		perror("execv");
		exit(1);
	case -1:
		perror("fork");
		exit(1);
	}
	(void) close(pd[1]);
	fin = fdopen(pd[0], "r");
	if (fin == NULL) {
		f_print(stderr, "%s: ", cmdname);
		perror(infilename);
		crash();
	}
}
コード例 #3
0
/*
 * Open input file with given define for C-preprocessor 
 */
static void
open_input (char *infile, char *define)
{
  int pd[2];

  infilename = (infile == NULL) ? "<stdin>" : infile;
#ifdef __MSDOS__
#define	DOSCPP	"\\prog\\bc31\\bin\\cpp.exe"
  {
    int retval;
    char drive[MAXDRIVE], dir[MAXDIR], name[MAXFILE], ext[MAXEXT];
    char cppfile[MAXPATH];
    char *cpp;

    if ((cpp = searchpath ("cpp.exe")) == NULL
	&& (cpp = getenv ("RPCGENCPP")) == NULL)
      cpp = DOSCPP;

    putarg (0, cpp);
    putarg (1, "-P-");
    putarg (2, CPPFLAGS);
    addarg (define);
    addarg (infile);
    addarg (NULL);

    retval = spawnvp (P_WAIT, arglist[0], arglist);
    if (retval != 0) {
      fprintf (stderr, "%s: C PreProcessor failed\n", cmdname);
      crash ();
    }

    fnsplit (infile, drive, dir, name, ext);
    fnmerge (cppfile, drive, dir, name, ".i");

    fin = fopen (cppfile, "r");
    if (fin == NULL) {
      f_print (stderr, "%s: ", cmdname);
      perror (cppfile);
      crash ();
    }
    dos_cppfile = strdup (cppfile);
    if (dos_cppfile == NULL) {
      fprintf (stderr, "%s: out of memory\n", cmdname);
      crash ();
    }
  }
#else
  (void) pipe (pd);
  switch (fork ()) {
  case 0:
    putarg (0, CPP);
    putarg (1, CPPFLAGS);
    addarg (define);
    addarg (infile);
    addarg ((char *) NULL);
    (void) close (1);
    (void) dup2 (pd[1], 1);
    (void) close (pd[0]);
    execv (arglist[0], arglist);
    perror ("execv");
    exit (1);
  case -1:
    perror ("fork");
    exit (1);
  }
  (void) close (pd[1]);
  fin = fdopen (pd[0], "r");
#endif
  if (fin == NULL) {
    f_print (stderr, "%s: ", cmdname);
    perror (infilename);
    crash ();
  }
}
コード例 #4
0
ファイル: SETARGV.C プロジェクト: badcodes/c
void _setargv__(void)
{
  unsigned char         far *cmdtail;
  unsigned char         *firstarg;
  unsigned char         far *cmdarg;
  int                   wild;
  int                   c;
  unsigned char         buffer[129];
  unsigned char         *p, *q;
  unsigned char         *lastdir;
  char                  **wargv;
  int                   i;
  struct ffblk          ffb;
 
  cmdtail = MK_FP(_psp, 0x81);
  cmdtail[cmdtail[-1]] = '\0';      /* make sure null at end */
  firstarg = (unsigned char *) sbrk(0);
  _C0argc = 1;
 
  while (*cmdtail != '\0')
  {
    /* skip white space */
    while (isascii(*cmdtail) && isspace(*cmdtail))
      ++cmdtail;
 
    /* done with command loop if end of command tail */
    if (*cmdtail == '\0')
      break;
 
    /* if quoted string, just save the argument */
    if ((c = *cmdtail) == '"' || c == '\'')
    {
      cmdarg = ++cmdtail;
      while (*cmdtail != c && *cmdtail != '\0')
        ++cmdtail;
      putarg(cmdarg, cmdtail, 0);
      if (*cmdtail != '\0')
        ++cmdtail;
      continue;
    }
 
    /* find word */
    cmdarg = cmdtail;
    wild = FALSE;
    p = lastdir = buffer;
    while ((c = *cmdtail) != '\0'
        && (!isascii(c) || !isspace(c)))
    {
      /* wild is TRUE if word contains * or ? */
      wild |= (c == '*' || c == '?');
/*  Next line was added to make the treatment of / and \ alike  */
      if (c == '/') c = '\\';
      *(p++) = c;
 
      /* lastdir points to the first character of the base file name */
      if (c == '\\' || c == ':')
        lastdir = p;
      ++cmdtail;
    }
    *p = '\0';
 
    if (*cmdarg == '-' || *cmdarg == '+')
      putarg(cmdarg, cmdtail, 0);
    else if (wild)
    {
      c = findfirst((char *) buffer, &ffb, 0);
      if (c)
        putarg(cmdarg, cmdtail, 0);
      else
        while (!c)
        {
          for (p = lastdir, q = (unsigned char *) FILENAME(ffb); *q != '\0';)
               *(p++) = *(q++);
          putarg(buffer, p, 1); /* use lowercase for filenames */
          c = findnext(&ffb);
        }
    }
    else
      putarg(cmdarg, cmdtail, 1); /* use lowercase for filenames */
  }
 
  /* allocate argv */
  if ((wargv = (char **) sbrk(sizeof(char *) * (_C0argc + 1))) == (char **) -1)
    abort();
  _C0argv = wargv;
 
  /* store program name */
  if (_osmajor < 3)
    *(wargv++) = "C";
  else
  {
      cmdtail = cmdarg = MK_FP(_envseg, _envLng + 2);
#   if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
      *(wargv++) = sbrk(0);
      while (*cmdtail != '\0')
        ++cmdtail;
      putarg(cmdarg, cmdtail, 0);
      --_C0argc;
#   else
      *(wargv++) = (char *) cmdarg;
      (void) sbrk(15);  /* kludge for TC++ library bug */
#   endif
  }
 
  /* store arguments */
  for (i = _C0argc; --i;)
  {
    *(wargv++) = (char *) firstarg;
    while(*++firstarg != '\0')
      ;
    ++firstarg;
  }
  *wargv = (char *) 0;
  errno = 0;
}