vt6655: slightly clean reading config file
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -60,6 +60,7 @@
|
|||||||
*/
|
*/
|
||||||
#undef __NO_VERSION__
|
#undef __NO_VERSION__
|
||||||
|
|
||||||
|
#include <linux/file.h>
|
||||||
#include "device.h"
|
#include "device.h"
|
||||||
#include "card.h"
|
#include "card.h"
|
||||||
#include "channel.h"
|
#include "channel.h"
|
||||||
@@ -2946,87 +2947,51 @@ static int Config_FileGetParameter(unsigned char *string,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Config_FileOperation(PSDevice pDevice,bool fwrite,unsigned char *Parameter) {
|
int Config_FileOperation(PSDevice pDevice,bool fwrite,unsigned char *Parameter)
|
||||||
unsigned char *config_path = CONFIG_PATH;
|
{
|
||||||
unsigned char *buffer = NULL;
|
unsigned char *buffer = kmalloc(1024, GFP_KERNEL);
|
||||||
unsigned char tmpbuffer[20];
|
unsigned char tmpbuffer[20];
|
||||||
struct file *filp=NULL;
|
struct file *file;
|
||||||
mm_segment_t old_fs = get_fs();
|
int result=0;
|
||||||
//int oldfsuid=0,oldfsgid=0;
|
|
||||||
int result=0;
|
|
||||||
|
|
||||||
set_fs (KERNEL_DS);
|
if (!buffer) {
|
||||||
|
printk("allocate mem for file fail?\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
file = filp_open(CONFIG_PATH, O_RDONLY, 0);
|
||||||
|
if (IS_ERR(file)) {
|
||||||
|
kfree(buffer);
|
||||||
|
printk("Config_FileOperation:open file fail?\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Can't do this anymore, so we rely on correct filesystem permissions:
|
if (kernel_read(file, 0, buffer, 1024) < 0) {
|
||||||
//Make sure a caller can read or write power as root
|
printk("read file error?\n");
|
||||||
oldfsuid=current->cred->fsuid;
|
result = -1;
|
||||||
oldfsgid=current->cred->fsgid;
|
goto error1;
|
||||||
current->cred->fsuid = 0;
|
}
|
||||||
current->cred->fsgid = 0;
|
|
||||||
*/
|
|
||||||
|
|
||||||
//open file
|
if (Config_FileGetParameter("ZONETYPE",tmpbuffer,buffer)!=true) {
|
||||||
filp = filp_open(config_path, O_RDWR, 0);
|
printk("get parameter error?\n");
|
||||||
if (IS_ERR(filp)) {
|
result = -1;
|
||||||
printk("Config_FileOperation:open file fail?\n");
|
goto error1;
|
||||||
result=-1;
|
}
|
||||||
goto error2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!(filp->f_op) || !(filp->f_op->read) ||!(filp->f_op->write)) {
|
if (memcmp(tmpbuffer,"USA",3)==0) {
|
||||||
printk("file %s cann't readable or writable?\n",config_path);
|
result = ZoneType_USA;
|
||||||
result = -1;
|
} else if(memcmp(tmpbuffer,"JAPAN",5)==0) {
|
||||||
goto error1;
|
result = ZoneType_Japan;
|
||||||
}
|
} else if(memcmp(tmpbuffer,"EUROPE",5)==0) {
|
||||||
|
result = ZoneType_Europe;
|
||||||
buffer = kmalloc(1024, GFP_KERNEL);
|
} else {
|
||||||
if(buffer==NULL) {
|
result = -1;
|
||||||
printk("allocate mem for file fail?\n");
|
printk("Unknown Zonetype[%s]?\n",tmpbuffer);
|
||||||
result = -1;
|
}
|
||||||
goto error1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(filp->f_op->read(filp, buffer, 1024, &filp->f_pos)<0) {
|
|
||||||
printk("read file error?\n");
|
|
||||||
result = -1;
|
|
||||||
goto error1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Config_FileGetParameter("ZONETYPE",tmpbuffer,buffer)!=true) {
|
|
||||||
printk("get parameter error?\n");
|
|
||||||
result = -1;
|
|
||||||
goto error1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(memcmp(tmpbuffer,"USA",3)==0) {
|
|
||||||
result=ZoneType_USA;
|
|
||||||
}
|
|
||||||
else if(memcmp(tmpbuffer,"JAPAN",5)==0) {
|
|
||||||
result=ZoneType_Japan;
|
|
||||||
}
|
|
||||||
else if(memcmp(tmpbuffer,"EUROPE",5)==0) {
|
|
||||||
result=ZoneType_Europe;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result = -1;
|
|
||||||
printk("Unknown Zonetype[%s]?\n",tmpbuffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
error1:
|
error1:
|
||||||
kfree(buffer);
|
kfree(buffer);
|
||||||
|
fput(file);
|
||||||
if(filp_close(filp,NULL))
|
return result;
|
||||||
printk("Config_FileOperation:close file fail\n");
|
|
||||||
|
|
||||||
error2:
|
|
||||||
set_fs (old_fs);
|
|
||||||
|
|
||||||
/*
|
|
||||||
current->cred->fsuid=oldfsuid;
|
|
||||||
current->cred->fsgid=oldfsgid;
|
|
||||||
*/
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user