NetBSD/usr.sbin/pkg_install/lib/exec.c
hubertf 9d0c5bb4ee FTP wildcard depends code, initial commit.
Modulo some code cleanup, this gives NetBSD full wildcard support not
only in pkgsrc, but esp. for binary packages installed from local disk
and via FTP. For more information, see:

	http://www.feyrer.de/NetBSD/wildcards.html
2000-01-19 23:28:28 +00:00

67 lines
1.7 KiB
C

/* $NetBSD: exec.c,v 1.7 2000/01/19 23:28:32 hubertf Exp $ */
#include <sys/cdefs.h>
#ifndef lint
#if 0
static const char *rcsid = "from FreeBSD Id: exec.c,v 1.6 1997/10/08 07:47:50 charnier Exp";
#else
__RCSID("$NetBSD: exec.c,v 1.7 2000/01/19 23:28:32 hubertf Exp $");
#endif
#endif
/*
* FreeBSD install - a package for the installation and maintainance
* of non-core utilities.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Jordan K. Hubbard
* 18 July 1993
*
* Miscellaneous system routines.
*
*/
#include <err.h>
#include "lib.h"
/*
* Unusual system() substitute. Accepts format string and args,
* builds and executes command. Returns exit code.
*/
int
vsystem(const char *fmt,...)
{
va_list args;
char *cmd;
size_t maxargs;
int ret;
maxargs = (size_t) sysconf(_SC_ARG_MAX);
maxargs -= 32; /* some slop for the sh -c */
if ((cmd = (char *) malloc(maxargs)) == (char *) NULL) {
warnx("vsystem can't alloc arg space");
return 1;
}
va_start(args, fmt);
if (vsnprintf(cmd, maxargs, fmt, args) > maxargs) {
warnx("vsystem args are too long");
return 1;
}
#ifdef VSYSTEM_DEBUG
printf("vsystem(\"%s\")\n", cmd);
#endif
ret = system(cmd);
va_end(args);
free(cmd);
return ret;
}