comedi: Don't use create_proc_read_entry()
authorDavid Howells <dhowells@redhat.com>
Mon, 8 Apr 2013 15:39:33 +0000 (16:39 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 29 Apr 2013 19:41:51 +0000 (15:41 -0400)
Don't use create_proc_read_entry() as that is deprecated, but rather use
proc_create_data() and seq_file instead.

Signed-off-by: David Howells <dhowells@redhat.com>
cc: David Schleef <ds@schleef.org>
cc: Ian Abbott <abbotti@mev.co.uk>
cc: Mori Hess <fmhess@users.sourceforge.net>
cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
cc: H Hartley Sweeten <hsweeten@visionengravers.com>
cc: devel@driverdev.osuosl.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/staging/comedi/proc.c

index f01e0cccac3b8b3404677570a58d24a5093f0906..db790f9fc9db9289c1530c9f5227037bbca0c9d5 100644 (file)
 #include "comedidev.h"
 #include "comedi_internal.h"
 #include <linux/proc_fs.h>
-#include <linux/string.h>
+#include <linux/seq_file.h>
 
-static int comedi_read(char *buf, char **start, off_t offset, int len,
-                      int *eof, void *data)
+static int comedi_read(struct seq_file *m, void *v)
 {
        int i;
        int devices_q = 0;
-       int l = 0;
        struct comedi_driver *driv;
 
-       l += sprintf(buf + l,
+       seq_printf(m,
                     "comedi version " COMEDI_RELEASE "\n"
                     "format string: %s\n",
                     "\"%2d: %-20s %-20s %4d\", i, "
@@ -49,39 +47,51 @@ static int comedi_read(char *buf, char **start, off_t offset, int len,
 
        for (i = 0; i < COMEDI_NUM_BOARD_MINORS; i++) {
                struct comedi_device *dev = comedi_dev_from_minor(i);
-
                if (!dev)
                        continue;
 
                if (dev->attached) {
                        devices_q = 1;
-                       l += sprintf(buf + l, "%2d: %-20s %-20s %4d\n",
-                                    i,
-                                    dev->driver->driver_name,
-                                    dev->board_name, dev->n_subdevices);
+                       seq_printf(m, "%2d: %-20s %-20s %4d\n",
+                                  i, dev->driver->driver_name,
+                                  dev->board_name, dev->n_subdevices);
                }
        }
        if (!devices_q)
-               l += sprintf(buf + l, "no devices\n");
+               seq_puts(m, "no devices\n");
 
        for (driv = comedi_drivers; driv; driv = driv->next) {
-               l += sprintf(buf + l, "%s:\n", driv->driver_name);
-               for (i = 0; i < driv->num_names; i++) {
-                       l += sprintf(buf + l, " %s\n",
-                                    *(char **)((char *)driv->board_name +
-                                               i * driv->offset));
-               }
+               seq_printf(m, "%s:\n", driv->driver_name);
+               for (i = 0; i < driv->num_names; i++)
+                       seq_printf(m, " %s\n",
+                                  *(char **)((char *)driv->board_name +
+                                             i * driv->offset));
+
                if (!driv->num_names)
-                       l += sprintf(buf + l, " %s\n", driv->driver_name);
+                       seq_printf(m, " %s\n", driv->driver_name);
        }
 
-       return l;
+       return 0;
+}
+
+/*
+ * seq_file wrappers for procfile show routines.
+ */
+static int comedi_proc_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, comedi_read, NULL);
 }
 
+static const struct file_operations comedi_proc_fops = {
+       .open           = comedi_proc_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = seq_release,
+};
+
 void comedi_proc_init(void)
 {
-       create_proc_read_entry("comedi", S_IFREG | S_IRUGO, NULL,
-                               comedi_read, NULL);
+       proc_create("comedi", 0644, NULL, &comedi_proc_fops);
 }
 
 void comedi_proc_cleanup(void)