perhaps this can be fixed using a macro like:

#define xioctl(fd,req,...)   bb_ioctl(#req,fd,req,__VA_ARGS__)

static int bb_ioctl(const char *estr, int fd, int request, void *argp, ...)
...

xioctl(get_console_fd(), VT_DISALLOCATE, (void *)num);
will now call a modified
bb_ioctl("VT_DISALLOCATE",get_console_fd(), VT_DISALLOCATE, (void *)num);

the define eats no space and the new bb_ioctl will allow passing a free 
errormsg.


beware: I did no real testing an that ...


re,
 wh



Tito wrote:
> On Sunday 24 June 2007 00:11:01 Denis Vlasenko wrote:
>> static int bb_ioctl(int fd, int request, void *argp, ...)
>>> {
>>>       va_list p;
>>>       char *string;
>>>       va_start(p, request);
>>>       string = va_arg(va_list p,  (char *));
>>>       
>>>       int e = ioctl(fd, request, argp);
>>>       if (e && string)
>>>               bb_perror_msg(" %s", string);
>> Use
>>                 bb_vperror_msg((string ? string : "ioctl"), p);
>>                 xfunc_die();
> 
> Hi,
> after doing a little testing it seems to me that the va_list solution
> is not doable as there is no way to determine:
> 
> string ? string : "ioctl"
> 
> this is due to the fact that with  va_arg:
>    If  there  is  no  next argument, random errors will occur.
> 
> Another easier solution giving at least a hint of what ioctl failed could be:
> 
> void xioctl(int fd, int request, void *argp)
> {
>       if (ioctl(fd, request, argp) < 0)
>               bb_perror_msg("ioctl %#x failed", request);
> }
> 
> 
> 
> in this case with deallocvt.c,
> 
> int deallocvt_main(int argc, char **argv)
> {
>       /* num = 0 deallocate all unused consoles */
>       int num = 0;
> 
>       switch (argc) {
>       case 2:
>               num = xatoul_range(argv[1], 1, 63);
>               /* Fallthrough */
>       case 1:
>               break;
>       default:
>               bb_show_usage();
>       }
> 
>       xioctl(get_console_fd(), VT_DISALLOCATE, (void *)num);
>       return EXIT_SUCCESS;
> }
> 
> the output is:
> 
> deallocvt: ioctl 0X5608 failed: Device or resource busy
> 
> Just an idea.
> 
> Ciao,
> Tito
> _______________________________________________
> busybox mailing list
> [email protected]
> http://busybox.net/cgi-bin/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox

Reply via email to