Beispiel #1
0
static ssize_t env_proc_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
{
		if(!env_valid){
			char p[32];
			char *page = (char *)p;
			int err = 0;
			ssize_t len = 0;
			printk("no env vaild\n");
			page += sprintf(page, "\nno env vaild\n");
 			len = page - &p[0];
 			
 			if(*ppos >= len){
 				return 0;
 			}
 			err = copy_to_user(buf,(char *)p,len);
 			*ppos += len;
 			if(err)
 				return err;
 			return len;	
		}else{
			int err = 0;
			int env_valid_length = get_env_valid_length();
			if(*ppos >= env_valid_length)
				return 0;
			if((size+*ppos) > env_valid_length)
				size = env_valid_length - *ppos;
			
			err = copy_to_user(buf,g_env.env_data + *ppos,size);
 			if(err)
 				return err;
 			*ppos += size;
 			return size;
		}
}
Beispiel #2
0
static ssize_t 
env_proc_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
{
	char p[32];
	char *page = (char *)p;
	int err = 0;
	ssize_t len = 0;
	int env_valid_length = 0;
	
	env_init();

	if (!env_valid) {
		pr_debug("[%s]read no env valid\n", MODULE_NAME);
		page += sprintf(page, "\nno env valid\n");
		len = page - &p[0];
 			
 		if (*ppos >= len) {
			return 0;
		}
 		err = copy_to_user(buf,(char *)p,len);
 		*ppos += len;
 		if (err) {
 			return err;
 		}
 		return len;	
	} else {	
		env_valid_length = get_env_valid_length();	
		if (*ppos >= env_valid_length) {
			return 0;
		}
		if ((size + *ppos) > env_valid_length) {
			size = env_valid_length - *ppos;
		}
		err = copy_to_user(buf, g_env.env_data + *ppos, size);
 		if (err) {
 			return err;
 		}
 		*ppos += size;
 		return size;
	}
}