diff --git a/examples/procfs1.c b/examples/procfs1.c index ff88e211..6d23b1e6 100644 --- a/examples/procfs1.c +++ b/examples/procfs1.c @@ -22,12 +22,19 @@ ssize_t procfile_read(struct file *filePointer, size_t buffer_length, loff_t *offset) { - int ret = 0; - if (strlen(buffer) == 0) { + char s[13] = "HelloWorld!\n"; + int len = sizeof(s); + ssize_t ret = len; + + if (*offset >= len || copy_to_user(buffer, s, len)) { + pr_info("copy_to_user failed\n"); + ret = 0; + } + else { pr_info("procfile read %s\n", filePointer->f_path.dentry->d_name.name); - ret = copy_to_user(buffer, "HelloWorld!\n", sizeof("HelloWorld!\n")); - ret = sizeof("HelloWorld!\n"); + *offset += len; } + return ret; } diff --git a/examples/procfs2.c b/examples/procfs2.c index 1379a9f2..842dd6d7 100644 --- a/examples/procfs2.c +++ b/examples/procfs2.c @@ -42,12 +42,19 @@ ssize_t procfile_read(struct file *filePointer, size_t buffer_length, loff_t *offset) { - int ret = 0; - if (strlen(buffer) == 0) { + char s[13] = "HelloWorld!\n"; + int len = sizeof(s); + ssize_t ret = len; + + if (*offset >= len || copy_to_user(buffer, s, len)) { + pr_info("copy_to_user failed\n"); + ret = 0; + } + else { pr_info("procfile read %s\n", filePointer->f_path.dentry->d_name.name); - ret = copy_to_user(buffer, "HelloWorld!\n", sizeof("HelloWorld!\n")); - ret = sizeof("HelloWorld!\n"); + *offset += len; } + return ret; }