Allocate buffer when opening and added release function.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Wed, 19 May 2010 15:41:13 +0000 (11:41 -0400)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Wed, 19 May 2010 15:41:13 +0000 (11:41 -0400)
hellochar.c

index e49565c..c95100e 100644 (file)
@@ -25,10 +25,19 @@ MODULE_LICENSE("GPL");
 
 static dev_t devnum;
 static struct cdev *dev;
+static const char default_greeting[] = "Hello, World!\n";
+
+struct hello_buffer {
+       size_t len;
+       char buffer[0];
+};
 
 static int hello_open(struct inode *ino, struct file *fp)
 {
-       printk(KERN_DEBUG "Hello, World!\n");
+       struct hello_buffer *hello = kmalloc(sizeof(*hello) + 4000, GFP_KERNEL);
+       if (!hello)
+               return -ENOMEM;
+       hello->private_data = hello;
        return 0;
 }
 
@@ -38,9 +47,16 @@ static ssize_t hello_read(struct file *fp, char __user *buf, size_t sz,
        return 0;
 }
 
+static int hello_release(struct inode *ino, struct file *fp)
+{
+       kfree(fp->private_data);
+       return 0;
+}
+
 static const struct file_operations hello_fops = {
        .owner = THIS_MODULE,
        .open = hello_open,
+       .release = hello_release,
        .read = hello_read,
 };