diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2006-02-13 08:13:48 +0300 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2006-02-13 08:13:48 +0300 |
commit | 3875e1945b55f0eb83fe7359614a801eeb716761 (patch) | |
tree | 4567aef3fb7d081cb7d7b7c9bcd94e0e44d39557 /drivers/char/tipar.c | |
parent | 587005de144acd3007b8e7f2a2a7c6add157c155 (diff) | |
parent | f1b318793dcd2d9ff6b5ac06e7762098fa079cee (diff) | |
download | linux-3875e1945b55f0eb83fe7359614a801eeb716761.tar.xz |
Merge branch 'upstream'
Diffstat (limited to 'drivers/char/tipar.c')
-rw-r--r-- | drivers/char/tipar.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/char/tipar.c b/drivers/char/tipar.c index 41a94bc79f67..eb2eb3e12d6a 100644 --- a/drivers/char/tipar.c +++ b/drivers/char/tipar.c @@ -250,12 +250,17 @@ tipar_open(struct inode *inode, struct file *file) { unsigned int minor = iminor(inode) - TIPAR_MINOR; - if (minor > tp_count - 1) + if (tp_count == 0 || minor > tp_count - 1) return -ENXIO; if (test_and_set_bit(minor, &opened)) return -EBUSY; + if (!table[minor].dev) { + printk(KERN_ERR "%s: NULL device for minor %u\n", + __FUNCTION__, minor); + return -ENXIO; + } parport_claim_or_block(table[minor].dev); init_ti_parallel(minor); parport_release(table[minor].dev); @@ -510,16 +515,20 @@ tipar_init_module(void) err = PTR_ERR(tipar_class); goto out_chrdev; } - if (parport_register_driver(&tipar_driver)) { + if (parport_register_driver(&tipar_driver) || tp_count == 0) { printk(KERN_ERR "tipar: unable to register with parport\n"); err = -EIO; - goto out; + goto out_class; } err = 0; goto out; +out_class: + class_destroy(tipar_class); + out_chrdev: + devfs_remove("ticables/par"); unregister_chrdev(TIPAR_MAJOR, "tipar"); out: return err; |