|
|
@@ -64,41 +64,39 @@ static int exe_cmd(char *cmd, node_t *nd)
|
|
|
char *pbuf=NULL;
|
|
|
int onelen=1000;
|
|
|
int dlen=0,blen=onelen;
|
|
|
-
|
|
|
- pbuf = malloc(onelen);
|
|
|
- if(!pbuf) {
|
|
|
- return -1;
|
|
|
- }
|
|
|
|
|
|
fp = popen(cmd, "r");
|
|
|
if (fp == NULL) {
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
- while(1) {
|
|
|
- r = fread(pbuf+dlen, sizeof(char), onelen, fp);
|
|
|
- if(r<=0) {
|
|
|
- LOGE("exe_cmd fread failed\n");
|
|
|
- break;
|
|
|
- }
|
|
|
- dlen += r;
|
|
|
- if(dlen+onelen>blen) {
|
|
|
- char* p = realloc(pbuf, dlen+onelen);
|
|
|
- if(!p) {
|
|
|
- LOGE("exe_cmd relloac %d failed\n", dlen+onelen);
|
|
|
- free(pbuf); pclose(fp);
|
|
|
- return -1;
|
|
|
+ if(nd) {
|
|
|
+ pbuf = malloc(onelen);
|
|
|
+ while(pbuf) {
|
|
|
+ r = fread(pbuf+dlen, sizeof(char), onelen, fp);
|
|
|
+ if(r<=0) {
|
|
|
+ LOGE("exe_cmd fread failed\n");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ dlen += r;
|
|
|
+ if(dlen+onelen>blen) {
|
|
|
+ char* p = realloc(pbuf, dlen+onelen);
|
|
|
+ if(!p) {
|
|
|
+ LOGE("exe_cmd relloac %d failed\n", dlen+onelen);
|
|
|
+ free(pbuf); pclose(fp);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ pbuf = p;
|
|
|
+ blen = dlen+onelen;
|
|
|
}
|
|
|
- pbuf = p;
|
|
|
- blen = dlen+onelen;
|
|
|
}
|
|
|
- }
|
|
|
+
|
|
|
+ nd->pbuf = pbuf;
|
|
|
+ nd->dlen = dlen;
|
|
|
+ nd->blen = blen;
|
|
|
+ }
|
|
|
pclose(fp);
|
|
|
|
|
|
- nd->pbuf = pbuf;
|
|
|
- nd->dlen = dlen;
|
|
|
- nd->blen = blen;
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
@@ -125,21 +123,26 @@ int sys_set_factory(void)
|
|
|
#ifdef KEY_PARAS_IN_FILE
|
|
|
r = paras_reset();
|
|
|
#else
|
|
|
- char dir[100],tmp[200];
|
|
|
+ char dir[100],src[200],dst[200];
|
|
|
|
|
|
extern GlobalDeviceManager __globalDeviceManage;
|
|
|
sqlite_deinit(__globalDeviceManage.db, &__globalDeviceManage.dbThreadlock);
|
|
|
|
|
|
sys_get_path(dir, "");
|
|
|
- snprintf(tmp, sizeof(tmp),"cp -f %s/%s %s/%s", dir, DATABASE_BAK_NAME, dir, DATABASE_NAME);
|
|
|
+ snprintf(src, sizeof(src), "%s/%s", dir, DATABASE_BAK_NAME);
|
|
|
+ snprintf(dst, sizeof(dst), "%s/%s", dir, DATABASE_NAME);
|
|
|
|
|
|
- LOGD("___ %s\n", tmp);
|
|
|
- r = system(tmp);
|
|
|
+ LOGD("___ file_copy from %s to %s\n", src, dst);
|
|
|
+ r = file_copy(dst, src);
|
|
|
if(r==0) {
|
|
|
r = set_net(&DFLT_PARAS.dev._network_info, IP_V4);
|
|
|
- if(r==0) {
|
|
|
- exit(0);
|
|
|
+ if(r) {
|
|
|
+ LOGE("____ set_net failed\n");
|
|
|
+ return -1;
|
|
|
}
|
|
|
+
|
|
|
+ LOGD("____ exit smartPDU now ...\n");
|
|
|
+ exit(0);
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
@@ -486,7 +489,7 @@ typedef struct {
|
|
|
static char* find_str(char *buf, char *head, char *tail, char *nic)
|
|
|
{
|
|
|
int len;
|
|
|
- char *p,*p1,*p2;
|
|
|
+ char *p,*p1,*p2,*ptr=NULL;
|
|
|
|
|
|
p1 = strstr(buf, head);
|
|
|
p2 = strstr(buf, tail);
|
|
|
@@ -498,13 +501,13 @@ static char* find_str(char *buf, char *head, char *tail, char *nic)
|
|
|
if(p) {
|
|
|
memcpy(p, p1, len); p[len] = 0;
|
|
|
if(strstr(p, nic)) {
|
|
|
- return p1;
|
|
|
+ ptr = p1;
|
|
|
}
|
|
|
free(p);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- return NULL;
|
|
|
+ return ptr;
|
|
|
}
|
|
|
static int get_nic(char *nbuf, int nlen, char *nic, char *fbuf, int flen)
|
|
|
{
|
|
|
@@ -522,7 +525,7 @@ static int get_nic(char *nbuf, int nlen, char *nic, char *fbuf, int flen)
|
|
|
}
|
|
|
|
|
|
len = XLEN(p2,p1);
|
|
|
- if(nlen>=len) {
|
|
|
+ if(nlen>len) {
|
|
|
memcpy(nbuf, p1, len);
|
|
|
nbuf[len] = 0;
|
|
|
//LOGD("__x__%s:\n %s\n", nic, nbuf);
|
|
|
@@ -612,14 +615,12 @@ static int set_dns(char *dns1, char *dns2)
|
|
|
int r;
|
|
|
char buf[4000];
|
|
|
|
|
|
+ LOGD("_____ set_dns\n");
|
|
|
memset(buf, 0, sizeof(buf));
|
|
|
snprintf(buf, sizeof(buf), "interface=eth0\nserver=%s\nserver=%s\n", dns1, dns2);
|
|
|
r = file_save(FILE_DNS, buf, strlen(buf))+1;
|
|
|
if(r==0) {
|
|
|
- r = system("killall dnsmasq; /usr/sbin/dnsmasq &");
|
|
|
- if(r) {
|
|
|
- LOGE("___ dnsmasq start failed\n");
|
|
|
- }
|
|
|
+ system("killall dnsmasq; /usr/sbin/dnsmasq &");
|
|
|
}
|
|
|
|
|
|
return r;
|
|
|
@@ -643,7 +644,7 @@ static int get_net(NetworkInfo_t *para, int ipv)
|
|
|
|
|
|
p = strstr(intf.e0, (ipv==IP_V4)?"inet":"inet6");
|
|
|
if(p==NULL) {
|
|
|
- LOGE("___get_net, inet/inet6 not found!\n");
|
|
|
+ LOGE("___get_ipv%d, %s not found!\n", (ipv==IP_V4)?4:6, (ipv==IP_V4)?"inet":"inet6");
|
|
|
free(fbuf.buf); return -1;
|
|
|
}
|
|
|
|
|
|
@@ -744,7 +745,7 @@ static int set_net(NetworkInfo_t *para, int ipv)
|
|
|
}
|
|
|
free(fbuf);
|
|
|
|
|
|
- r = set_dns(para->dns1, para->dns2);
|
|
|
+ set_dns(para->dns1, para->dns2);
|
|
|
|
|
|
return r;
|
|
|
}
|
|
|
@@ -790,7 +791,7 @@ int sys_set_net(NetworkInfo_t *para, int ipVersion)
|
|
|
r = get_net(¶2, ipVersion);
|
|
|
if(r==0) {
|
|
|
if(memcmp(para, ¶2, sizeof(NetworkInfo_t))==0) {
|
|
|
- LOGW("restart %s failed\n", DFLT_NIC);
|
|
|
+ LOGW("%s NetworkInfo is same, no need to set\n", DFLT_NIC);
|
|
|
return -1;
|
|
|
}
|
|
|
r = set_net(para, ipVersion);
|