ksudoku/ksudoku.c

75 lines
1.6 KiB
C

#include "ksudoku.h"
#define KSTUDY_VERSION "0.1"
#define KSTUDY_DESC "Kernel Sudoku Module"
static MATRIX_ATTR_RO(is_valid);
static MATRIX_ATTR_RO(is_solved);
/**
* sudoku_create_file - create sysfs attribute file for the given sudoku.
* @sudoku: sudoku
* @attr: sudoku attribute descriptor.
*/
int sudoku_create_file(struct sudoku *s,
const struct matrix_attribute *attr)
{
int error = 0;
if (s) {
WARN(((attr->attr.mode & S_IWUGO) && !attr->store),
"Attribute %s: write permission without 'store'\n",
attr->attr.name);
WARN(((attr->attr.mode & S_IRUGO) && !attr->show),
"Attribute %s: read permission without 'show'\n",
attr->attr.name);
error = sysfs_create_file(&s->kobj, &attr->attr);
}
return error;
}
EXPORT_SYMBOL_GPL(sudoku_create_file);
static ssize_t is_valid_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct sudoku_attribute *s_attr = to_sudoku_attr(attr);
struct sudoku *s = to_sudoku(kobj);
ssize_t ret = -EIO;
if (s_attr->show)
ret = s_attr->show(s, s_attr, buf);
if (ret >= (ssize_t)PAGE_SIZE) {
printk("is_valid_show: %pS returned bad count\n",
s_attr->show);
}
return ret;
}
static int kstudy_init(void)
{
printk(KERN_ALERT "Init ksudoku.\n");
return 0;
}
static void kstudy_exit(void)
{
printk(KERN_ALERT "Exit ksudoku.\n");
}
MODULE_AUTHOR("Sameer Rahmani <lxsameer@gnu.org>");
MODULE_DESCRIPTION(KSTUDY_DESC);
MODULE_VERSION(KSTUDY_VERSION);
MODULE_LICENSE("GPL");
module_init(kstudy_init);
module_exit(kstudy_exit);