]>
git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/hwinfo/hwscanqueue.c
3 Copyright 2004 by SUSE (<adrian@suse.de>) */
16 #include "init_message.h"
18 int main( int argc
, char **argv
)
25 char *device
= argv
[2];
28 fprintf( stderr
, "help: hwscanqueue hwscan-commands\n" );
29 fprintf( stderr
, "help: commands:\n" );
30 for ( i
=0; i
<NR_COMMANDS
; i
++ ){
31 fprintf( stderr
, " --%s", command_args
[i
] );
32 if ( command_with_device
[i
] )
33 fprintf( stderr
, " device" );
34 fprintf( stderr
, "\n");
36 fprintf( stderr
, " --avail=yes/no id\n" );
37 fprintf( stderr
, " --scan=device\n" );
38 fprintf( stderr
, " --stop=device\n" );
42 if ( !strncmp("--cfg=", argv
[1], 6) && argc
>2 )
43 snprintf( m
.mtext
, MESSAGE_BUFFER
, "C/sbin/hwscan %s %s", argv
[1], argv
[2] );
44 else if ( !strncmp("--avail=", argv
[1], 8) && argc
>2 )
45 snprintf( m
.mtext
, MESSAGE_BUFFER
, "C/sbin/hwscan %s %s", argv
[1], argv
[2] );
46 else if ( !strncmp("--scan=", argv
[1], 7) )
47 snprintf( m
.mtext
, MESSAGE_BUFFER
, "A%s", argv
[1]+7 );
48 else if ( !strncmp("--stop=", argv
[1], 7) )
49 snprintf( m
.mtext
, MESSAGE_BUFFER
, "R%s", argv
[1]+7 );
50 else if ( !strncmp("--", argv
[1], 2) ){
51 for ( i
=0; i
<NR_COMMANDS
; i
++ ){
52 if ( !strcmp(argv
[1]+2,command_args
[i
]) ){
54 printf("COMMAND %s\n", command_args
[i
] );
56 snprintf( m
.mtext
, MESSAGE_BUFFER
, "S%d", i
);
57 if (command_with_device
[i
]){
59 fprintf(stderr
, "need a device for this command\n");
62 strncat( m
.mtext
, device
, MESSAGE_BUFFER
-3 );
67 if ( i
>=NR_COMMANDS
){
68 fprintf(stderr
, "unknown command\n");
74 if ( (msgid
= msgget(key
, IPC_CREAT
| 0600)) < 0 ){
75 perror("unable to init.");
79 ret
= msgsnd( msgid
, &m
, MESSAGE_BUFFER
, IPC_NOWAIT
);
81 printf("SEND %s, return %d\n", m
.mtext
, ret
);
85 perror("message send failed");
87 // success ... start hwscand, if it is not yet running
91 int fd
= open( PID_FILE
, O_RDONLY
);
92 if ( fd
>= 0 && (r
=read(fd
,buffer
,1023)) > 0 ){
95 snprintf(link
, 1023, "/proc/%s/exe", buffer
);
96 if ( (r
=readlink( link
, buffer
, 1023 )) > 0 ){
100 else if ( strcmp("/hwscand", buffer
+strlen(buffer
)-8) )
109 signal(SIGCHLD
,SIG_IGN
);
112 /* Change directory to allow clean shut-down */
119 execve("/sbin/hwscand", 0, 0);