VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / sound / drivers / opl4 / opl4_proc.c
index f2f364d..bbea9ab 100644 (file)
@@ -50,41 +50,42 @@ static int snd_opl4_mem_proc_release(snd_info_entry_t *entry,
 }
 
 static long snd_opl4_mem_proc_read(snd_info_entry_t *entry, void *file_private_data,
-                                  struct file *file, char __user *_buf, long count)
+                                  struct file *file, char __user *_buf,
+                                  unsigned long count, unsigned long pos)
 {
        opl4_t *opl4 = snd_magic_cast(opl4_t, entry->private_data, return -ENXIO);
        long size;
        char* buf;
 
        size = count;
-       if (file->f_pos + size > entry->size)
-               size = entry->size - file->f_pos;
+       if (pos + size > entry->size)
+               size = entry->size - pos;
        if (size > 0) {
                buf = vmalloc(size);
                if (!buf)
                        return -ENOMEM;
-               snd_opl4_read_memory(opl4, buf, file->f_pos, size);
+               snd_opl4_read_memory(opl4, buf, pos, size);
                if (copy_to_user(_buf, buf, size)) {
                        vfree(buf);
                        return -EFAULT;
                }
                vfree(buf);
-               file->f_pos += size;
                return size;
        }
        return 0;
 }
 
 static long snd_opl4_mem_proc_write(snd_info_entry_t *entry, void *file_private_data,
-                                   struct file *file, const char __user *_buf, long count)
+                                   struct file *file, const char __user *_buf,
+                                   unsigned long count, unsigned long pos)
 {
        opl4_t *opl4 = snd_magic_cast(opl4_t, entry->private_data, return -ENXIO);
        long size;
        char *buf;
 
        size = count;
-       if (file->f_pos + size > entry->size)
-               size = entry->size - file->f_pos;
+       if (pos + size > entry->size)
+               size = entry->size - pos;
        if (size > 0) {
                buf = vmalloc(size);
                if (!buf)
@@ -93,9 +94,8 @@ static long snd_opl4_mem_proc_write(snd_info_entry_t *entry, void *file_private_
                        vfree(buf);
                        return -EFAULT;
                }
-               snd_opl4_write_memory(opl4, buf, file->f_pos, size);
+               snd_opl4_write_memory(opl4, buf, pos, size);
                vfree(buf);
-               file->f_pos += size;
                return size;
        }
        return 0;