Sophie

Sophie

distrib > Mandriva > 2008.0 > x86_64 > media > main-backports-src > by-pkgid > 51fdad8cbf079a7084947eef044d5f84 > files > 4

virtualbox-1.5.6-1mdv2008.0.src.rpm

--- VirtualBox-1.5.0_OSE/src/VBox/Additions/linux/module/vboxmod.c.misc_register	2007-08-30 17:16:27.000000000 +0200
+++ VirtualBox-1.5.0_OSE/src/VBox/Additions/linux/module/vboxmod.c	2007-09-28 23:52:01.000000000 +0200
@@ -17,6 +17,7 @@
 
 #include "the-linux-kernel.h"
 #include "version-generated.h"
+#include <linux/miscdevice.h>
 
 /* #define IRQ_DEBUG */
 
@@ -411,6 +412,13 @@ static struct file_operations vbox_fops 
     .llseek  = no_llseek
 };
 
+static struct miscdevice vbox_dev =
+{
+    .minor      = MISC_DYNAMIC_MINOR,
+    .name       = "vboxadd",
+    .fops       = &vbox_fops,
+};
+
 #ifndef IRQ_RETVAL
 /* interrupt handlers in 2.4 kernels don't return anything */
 # define irqreturn_t void
@@ -685,8 +693,13 @@ static __init int init(void)
     }
 
     /* register a character device */
-    err = register_chrdev(vbox_major, "vboxadd", &vbox_fops);
-    if (err < 0 || ((vbox_major & err) || (!vbox_major && !err)))
+
+    if (vbox_major > 0) {
+        err = register_chrdev(vbox_major, "vboxadd", &vbox_fops);
+    } else {
+        err = misc_register(&vbox_dev);
+    }
+    if (err < 0 || ((vbox_major & err)))
     {
         printk(KERN_ERR "vboxadd: register_chrdev failed: vbox_major: %d, err = %d\n",
                vbox_major, err);
@@ -829,7 +842,11 @@ static __init int init(void)
 fail:
     PCI_DEV_PUT(pcidev);
     free_resources();
-    unregister_chrdev(vbox_major, "vboxadd");
+    if (vbox_major > 0) {
+        unregister_chrdev(vbox_major, "vboxadd");
+    } else {
+        misc_deregister(&vbox_dev);
+    }
     return err;
 }
 
@@ -841,7 +858,11 @@ static __exit void fini(void)
 {
     printk(KERN_DEBUG "vboxadd: unloading...\n");
 
-    unregister_chrdev(vbox_major, "vboxadd");
+    if (vbox_major > 0) {
+        unregister_chrdev(vbox_major, "vboxadd");
+    } else {
+        misc_deregister(&vbox_dev);
+    }
     free_resources();
     vboxadd_cmc_fini ();
     printk(KERN_DEBUG "vboxadd: unloaded\n");