Exemplo n.º 1
0
Arquivo: proc.c Projeto: 274914765/C
static int proc_write_node(struct file *file, const char __user * buf,
               unsigned long count, void *data)
{
    struct pnp_bios_node *node;
    int boot = (long)data >> 8;
    u8 nodenum = (long)data;
    int ret = count;

    node = kzalloc(node_info.max_node_size, GFP_KERNEL);
    if (!node)
        return -ENOMEM;
    if (pnp_bios_get_dev_node(&nodenum, boot, node)) {
        ret = -EIO;
        goto out;
    }
    if (count != node->size - sizeof(struct pnp_bios_node)) {
        ret = -EINVAL;
        goto out;
    }
    if (copy_from_user(node->data, buf, count)) {
        ret = -EFAULT;
        goto out;
    }
    if (pnp_bios_set_dev_node(node->handle, boot, node) != 0) {
        ret = -EINVAL;
        goto out;
    }
    ret = count;
out:
    kfree(node);
    return ret;
}
Exemplo n.º 2
0
static int proc_write_node(struct file *file, const char *buf,
			   unsigned long count, void *data)
{
	struct pnp_bios_node *node;
	int boot = (long)data >> 8;
	u8 num = (long)data;

	node = kmalloc(node_info.max_node_size, GFP_KERNEL);
	if (!node) return -ENOMEM;
	pnp_bios_get_dev_node(&num, boot, node);
	if (count != node->size - sizeof(struct pnp_bios_node))
		return -EINVAL;
	memcpy(node->data, buf, count);
	if (pnp_bios_set_dev_node(node->handle, boot, node) != 0)
	    return -EINVAL;
	kfree(node);
	return count;
}