projects
/
cascardo
/
kernel
/
samples
/
char2
/
.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allocate buffer when opening and added release function.
[cascardo/kernel/samples/char2/.git]
/
hellochar.c
diff --git
a/hellochar.c
b/hellochar.c
index
e49565c
..
c95100e
100644
(file)
--- a/
hellochar.c
+++ b/
hellochar.c
@@
-25,10
+25,19
@@
MODULE_LICENSE("GPL");
static dev_t devnum;
static struct cdev *dev;
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)
{
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;
}
return 0;
}
@@
-38,9
+47,16
@@
static ssize_t hello_read(struct file *fp, char __user *buf, size_t sz,
return 0;
}
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,
static const struct file_operations hello_fops = {
.owner = THIS_MODULE,
.open = hello_open,
+ .release = hello_release,
.read = hello_read,
};
.read = hello_read,
};