[PATCH] udev - make exec_callout() reusable

Here is a patch that switches exec_callout() to be reusable.
I want it to be callable in a different context.
This commit is contained in:
kay.sievers@vrfy.org 2004-01-10 01:10:50 -08:00 committed by Greg KH
parent 2794d24917
commit 41397661c6

View file

@ -319,7 +319,7 @@ static int do_ignore(struct sysfs_class_device *class_dev, struct udevice *udev,
return -ENODEV; return -ENODEV;
} }
static int exec_callout(struct config_device *dev, char *value, int len) static int exec_program(char *path, char *value, int len)
{ {
int retval; int retval;
int res; int res;
@ -332,7 +332,7 @@ static int exec_callout(struct config_device *dev, char *value, int len)
char *args[CALLOUT_MAXARG]; char *args[CALLOUT_MAXARG];
int i; int i;
dbg("callout to '%s'", dev->exec_program); dbg("callout to '%s'", path);
retval = pipe(fds); retval = pipe(fds);
if (retval != 0) { if (retval != 0) {
dbg("pipe failed"); dbg("pipe failed");
@ -348,9 +348,9 @@ static int exec_callout(struct config_device *dev, char *value, int len)
/* child */ /* child */
close(STDOUT_FILENO); close(STDOUT_FILENO);
dup(fds[1]); /* dup write side of pipe to STDOUT */ dup(fds[1]); /* dup write side of pipe to STDOUT */
if (strchr(dev->exec_program, ' ')) { if (strchr(path, ' ')) {
/* callout with arguments */ /* callout with arguments */
pos = dev->exec_program; pos = path;
for (i=0; i < CALLOUT_MAXARG-1; i++) { for (i=0; i < CALLOUT_MAXARG-1; i++) {
args[i] = strsep(&pos, " "); args[i] = strsep(&pos, " ");
if (args[i] == NULL) if (args[i] == NULL)
@ -362,7 +362,7 @@ static int exec_callout(struct config_device *dev, char *value, int len)
} }
retval = execve(args[0], args, main_envp); retval = execve(args[0], args, main_envp);
} else { } else {
retval = execve(dev->exec_program, main_argv, main_envp); retval = execve(path, main_argv, main_envp);
} }
if (retval != 0) { if (retval != 0) {
dbg("child execve failed"); dbg("child execve failed");
@ -428,7 +428,7 @@ static int do_callout(struct sysfs_class_device *class_dev, struct udevice *udev
/* substitute anything that needs to be in the program name */ /* substitute anything that needs to be in the program name */
apply_format(udev, dev->exec_program); apply_format(udev, dev->exec_program);
if (exec_callout(dev, udev->callout_value, NAME_SIZE)) if (exec_program(dev->exec_program, udev->callout_value, NAME_SIZE))
continue; continue;
if (strcmp_pattern(dev->id, udev->callout_value) != 0) if (strcmp_pattern(dev->id, udev->callout_value) != 0)
continue; continue;