vserver 1.9.3
[linux-2.6.git] / sound / oss / emu10k1 / midi.c
index 06a7899..f0a48f3 100644 (file)
@@ -185,7 +185,7 @@ match:
 
        up(&card->open_sem);
 
-       return 0;
+       return nonseekable_open(inode, file);
 }
 
 static int emu10k1_midi_release(struct inode *inode, struct file *file)
@@ -244,7 +244,7 @@ static int emu10k1_midi_release(struct inode *inode, struct file *file)
        return 0;
 }
 
-static ssize_t emu10k1_midi_read(struct file *file, char *buffer, size_t count, loff_t * pos)
+static ssize_t emu10k1_midi_read(struct file *file, char __user *buffer, size_t count, loff_t * pos)
 {
        struct emu10k1_mididevice *midi_dev = (struct emu10k1_mididevice *) file->private_data;
        ssize_t ret = 0;
@@ -253,9 +253,6 @@ static ssize_t emu10k1_midi_read(struct file *file, char *buffer, size_t count,
 
        DPD(4, "emu10k1_midi_read(), count %#x\n", (u32) count);
 
-       if (pos != &file->f_pos)
-               return -ESPIPE;
-
        if (!access_ok(VERIFY_WRITE, buffer, count))
                return -EFAULT;
 
@@ -319,18 +316,14 @@ static ssize_t emu10k1_midi_read(struct file *file, char *buffer, size_t count,
        return ret;
 }
 
-static ssize_t emu10k1_midi_write(struct file *file, const char *buffer, size_t count, loff_t * pos)
+static ssize_t emu10k1_midi_write(struct file *file, const char __user *buffer, size_t count, loff_t * pos)
 {
        struct emu10k1_mididevice *midi_dev = (struct emu10k1_mididevice *) file->private_data;
        struct midi_hdr *midihdr;
-       ssize_t ret = 0;
        unsigned long flags;
 
        DPD(4, "emu10k1_midi_write(), count=%#x\n", (u32) count);
 
-       if (pos != &file->f_pos)
-               return -ESPIPE;
-
        if (!access_ok(VERIFY_READ, buffer, count))
                return -EFAULT;
 
@@ -350,7 +343,7 @@ static ssize_t emu10k1_midi_write(struct file *file, const char *buffer, size_t
        if (copy_from_user(midihdr->data, buffer, count)) {
                kfree(midihdr->data);
                kfree(midihdr);
-               return ret ? ret : -EFAULT;
+               return -EFAULT;
        }
 
        spin_lock_irqsave(&midi_spinlock, flags);
@@ -532,7 +525,7 @@ void emu10k1_seq_midi_close(int dev)
 
        if (card->seq_mididev) {
                kfree(card->seq_mididev);
-               card->seq_mididev = 0;
+               card->seq_mididev = NULL;
        }
 }