support arguments in callout exec
Hi,
here is argument support for CALLOUT exec:
CALLOUT, PROGRAM="/bin/echo -n xxx", BUS="usb", ID="xxx", NAME="webcam%n"
results in:
Nov 20 02:35:20 pim udev[30422]: get_major_minor: found major = 81, minor = 0 Nov 20 02:35:20 pim udev[30422]: exec_callout: callout to /bin/echo -n xxx Nov 20 02:35:20 pim udev[30422]: exec_callout: callout returned 'xxx' Nov 20 02:35:20 pim udev[30422]: get_attr: kernel number appended: 0
The feature is really nice, but the maximum argument count is hard coded to 8. What do you think?
thanks,
Kay
09-namedev.c-callout-argument-support.diff
namdev.c - support for argument in CALLOUT exec
namedev.c renamed from udev/namedev.c +12 -1
@@ -480,6 +480,9 @@pid_t pid;int value_set =0 ;char buffer[256 ]; +char *prog; +char *args[8 ]; +int i;dbg ("callout to %s\n" , dev->exec_program); retval =pipe (fds);
@@ -499,7 +502,14 @@*/ close (STDOUT_FILENO );dup (fds[1 ]);/* dup write side of pipe to STDOUT */ - retval =execve (dev->exec_program, main_argv, main_envp); +strcpy (buffer, dev->exec_program); + prog =strtok (buffer," " ); +for (i=1 ; i<=8 ; i++) { + args[i] =strtok (NULL ," " ); +if (args[i] ==NULL ) +break ; + } + retval =execve (prog, args, main_envp);if (retval !=0 ) {dbg ("child execve failed" );exit (1 );
@@ -528,6 +538,7 @@strncpy (value, buffer, len); } } +dbg ("callout returned '%s'" , value);close (fds[0 ]); res =wait (&status);if (res <0 ) {