/*
- * udev_utils_run.c - execute programs from udev and read its output
- *
* Copyright (C) 2004-2005 Kay Sievers <kay.sievers@vrfy.org>
*
* This program is free software; you can redistribute it and/or modify it
*
* 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.,
- * 675 Mass Ave, Cambridge, MA 02139, USA.
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
#include <fcntl.h>
#include <errno.h>
#include <ctype.h>
+#include <syslog.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/wait.h>
}
int run_program(const char *command, const char *subsystem,
- char *result, size_t ressize, size_t *reslen, int log)
+ char *result, size_t ressize, size_t *reslen)
{
- int retval = 0;
int status;
int outpipe[2] = {-1, -1};
int errpipe[2] = {-1, -1};
char *argv[(sizeof(arg) / 2) + 1];
int devnull;
int i;
+ int retval = 0;
/* build argv from comand */
strlcpy(arg, command, sizeof(arg));
info("'%s'", command);
/* prepare pipes from child to parent */
- if (result || log) {
+ if (result != NULL || udev_log_priority >= LOG_INFO) {
if (pipe(outpipe) != 0) {
err("pipe failed: %s", strerror(errno));
return -1;
}
}
- if (log) {
+ if (udev_log_priority >= LOG_INFO) {
if (pipe(errpipe) != 0) {
err("pipe failed: %s", strerror(errno));
return -1;
close(errpipe[WRITE_END]);
}
execv(argv[0], argv);
-
- /* we should never reach this */
- err("exec of program '%s' failed", argv[0]);
+ if (errno == ENOENT || errno == ENOTDIR) {
+ /* may be on a filesytem which is not mounted right now */
+ info("program '%s' not found", argv[0]);
+ } else {
+ /* other problems */
+ err("exec of program '%s' failed", argv[0]);
+ }
_exit(1);
case -1:
err("fork of '%s' failed: %s", argv[0], strerror(errno));