Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 23 Oct 2005 19:57:00 -0700
From:      Daniel Rudy <dr2867@pacbell.net>
To:        freebsd-hackers@freebsd.org
Subject:   devinfo(3) problem...
Message-ID:  <435C4D7C.7080504@pacbell.net>

next in thread | raw e-mail | index | archive | help

Consider the following code fragment:


(segment 2)
Calling code section:
    /* get devinfo root nexus */
    printf("root ptr: %p\n", root);
    result = usb_devinfo_root(&root);
    printf("root ptr: %p\n", root);
    if (result < 0)
      {
        usb_devinfo_close();
        return(-1);
      }

/* internal: get devinfo root nexus */
int usb_devinfo_root(struct devinfo_dev **root)
  {
    printf("root: %p\n", *root);
    *root = devinfo_handle_to_device(DEVINFO_ROOT_DEVICE);
    printf("root: %p\n", *root);  <---- second call printf
    if (*root == NULL)
      {
        if (usb_param_use_error == TRUE) error("usb.c: usb_devinfo_root:
root device not found", errno);
        if (usb_param_errors_fatal == TRUE) exit(2);
        return(-1);
      }
    return(0);
  }

The problem is that devinfo_handle_to_device always returns a null
pointer here.  Why?   The next code segment, devinfo_handle_to_device
returns a proper address.

(segment 1)
    /* get devinfo root nexus */
    root = devinfo_handle_to_device(DEVINFO_ROOT_DEVICE);
    if (root == NULL)
      {
        devinfo_free();
        return(-1);
      }

output:
usb_param_devmode: 255
usb_param_devtype: 255
usb_param_mode_pref: 0
ioctl result: -1
devinfo result: 0
found_ioctl: 0
found_devinfo: 1    <---- first call
devinfo device name: umass0
usb_devinfo_open result: 0
root ptr: 0x2815769c
root: 0x2815769c
root: 0x0           <---- second call
usb.c: usb_devinfo_root: root device not found: No such file or directory
root ptr: 0x0
Fatal: Unable to get device information


Now I have made sure that I have called devinfo_free() during the first
call before calling devinfo_init() a second time.  I tried calling this
code branch on the first time, and it executes properly, so why does it
fail on the second call?

-- 
Daniel Rudy




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?435C4D7C.7080504>