static void parse_cfg_cmd(struct ubl_header *ublhdr, int32_t cmd, char *token, char *name, int lineno, int fld, int dcd_len) { static int cmd_ver_first = ~0; switch (cmd) { case CMD_BOOT_MODE: ublhdr->magic = get_table_entry_id(ublimage_bootops, "ublimage special boot mode", token); if (ublhdr->magic == -1) { fprintf(stderr, "Error: %s[%d] -Invalid boot mode" "(%s)\n", name, lineno, token); exit(EXIT_FAILURE); } ublhdr->magic += UBL_MAGIC_BASE; if (unlikely(cmd_ver_first != 1)) cmd_ver_first = 0; break; case CMD_ENTRY: ublhdr->entry = get_cfg_value(token, name, lineno); break; case CMD_PAGE: ublhdr->pages = get_cfg_value(token, name, lineno); break; case CMD_ST_BLOCK: ublhdr->block = get_cfg_value(token, name, lineno); break; case CMD_ST_PAGE: ublhdr->page = get_cfg_value(token, name, lineno); break; case CMD_LD_ADDR: ublhdr->pll_m = get_cfg_value(token, name, lineno); break; } }
static void parse_cfg_fld(struct imx_header *imxhdr, int32_t *cmd, char *token, char *name, int lineno, int fld, int *dcd_len) { int value; switch (fld) { case CFG_COMMAND: *cmd = get_table_entry_id(imximage_cmds, "imximage commands", token); if (*cmd < 0) { fprintf(stderr, "Error: %s[%d] - Invalid command" "(%s)\n", name, lineno, token); exit(EXIT_FAILURE); } break; case CFG_REG_SIZE: parse_cfg_cmd(imxhdr, *cmd, token, name, lineno, fld, *dcd_len); break; case CFG_REG_ADDRESS: case CFG_REG_VALUE: switch(*cmd) { case CMD_WRITE_DATA: case CMD_WRITE_CLR_BIT: case CMD_WRITE_SET_BIT: case CMD_CHECK_BITS_SET: case CMD_CHECK_BITS_CLR: value = get_cfg_value(token, name, lineno); if (set_dcd_param) (*set_dcd_param)(imxhdr, *dcd_len, *cmd); (*set_dcd_val)(imxhdr, name, lineno, fld, value, *dcd_len); if (fld == CFG_REG_VALUE) { (*dcd_len)++; if (*dcd_len > max_dcd_entries) { fprintf(stderr, "Error: %s[%d] -" "DCD table exceeds maximum size(%d)\n", name, lineno, max_dcd_entries); exit(EXIT_FAILURE); } } break; case CMD_PLUGIN: value = get_cfg_value(token, name, lineno); imximage_iram_free_start = value; break; default: break; } break; default: break; } }
cfgdata split_cfg_line(char *cfgline) { cfgdata retval; get_cfg_name(cfgline, retval.cfgname, '='); get_cfg_value(cfgline, retval.cfgval, '='); return retval; } // split_cfg_line()
// find there is a input type is "radio" in this line and insert the value for displaying inline void radio_value_insert(char *line, char *var_head, FILE *out) { char *file_head1, *file_head2, *radio_var, *ptr; if((radio_var=parsestr1(var_head,"/*value=\"")) && (file_head1=parsestr1(var_head,"/*name=\""))) { if(file_head1<radio_var){ file_head2=radio_var; ptr=file_head1; }else{ file_head2=file_head1; ptr=radio_var; } file_head2=strchr(file_head2,'\"'); file_head2[0]='\0'; file_head2++; fprintf(out,"%s\" %s\"", line, var_head); ptr=strchr(ptr,'\"'); ptr[0]='\0'; ptr++; ptr = get_cfg_value(NULL, file_head1, 0); //another ptr if(ptr && (strcmp(ptr,radio_var)==0) ) fprintf(out,"checked"); point[1] = file_head2; } else fprintf(out, "%s\"", line); /* send out the remain of line */ }
static uint32_t imximage_parse_cfg_file(struct imx_header *imxhdr, char *name) { FILE *fd = NULL; char *line = NULL; char *token, *saveptr1, *saveptr2; int lineno = 0; int fld, value; size_t len; int dcd_len = 0; dcd_t *dcd = &imxhdr->dcd_table; int32_t cmd; fd = fopen(name, "r"); if (fd == 0) { fprintf(stderr, "Error: %s - Can't open DCD file\n", name); exit(EXIT_FAILURE); } /* Very simple parsing, line starting with # are comments * and are dropped */ while ((getline(&line, &len, fd)) > 0) { lineno++; token = strtok_r(line, "\r\n", &saveptr1); if (token == NULL) continue; /* Check inside the single line */ for (fld = CFG_COMMAND, cmd = CMD_INVALID, line = token; ; line = NULL, fld++) { token = strtok_r(line, " \t", &saveptr2); if (token == NULL) break; /* Drop all text starting with '#' as comments */ if (token[0] == '#') break; /* parse all fields in a single line */ switch (fld) { case CFG_COMMAND: cmd = get_table_entry_id(imximage_cmds, "imximage commands", token); if (cmd < 0) { fprintf(stderr, "Error: %s[%d] - " "Invalid command (%s)\n", name, lineno, token); exit(EXIT_FAILURE); } break; case CFG_REG_SIZE: switch (cmd) { case CMD_BOOT_FROM: /* Get flash header offset */ imxhdr->flash_offset = get_table_entry_id( imximage_bootops, "imximage boot option", token); if (imxhdr->flash_offset == -1) { fprintf(stderr, "Error: %s[%d] -" "Invalid boot device" "(%s)\n", name, lineno, token); exit(EXIT_FAILURE); } break; case CMD_DATA: value = get_cfg_value(token, name, lineno); /* Byte, halfword, word */ if ((value != 1) && (value != 2) && (value != 4)) { fprintf(stderr, "Error: %s[%d] - " "Invalid register size " "(%d)\n", name, lineno, value); exit(EXIT_FAILURE); } dcd->addr_data[dcd_len].type = value; break; } case CFG_REG_ADDRESS: if (cmd == CMD_DATA) dcd->addr_data[dcd_len].addr = get_cfg_value(token, name, lineno); break; case CFG_REG_VALUE: if (cmd == CMD_DATA) { dcd->addr_data[dcd_len].value = get_cfg_value(token, name, lineno); dcd_len++; } break; } } if (dcd_len > MAX_HW_CFG_SIZE) { fprintf(stderr, "Error: %s[%d] -" "DCD table exceeds maximum size(%d)\n", name, lineno, MAX_HW_CFG_SIZE); } } dcd->preamble.barker = DCD_BARKER; dcd->preamble.length = dcd_len * sizeof(dcd_type_addr_data_t); fclose(fd); return dcd_len; }
static void parse_cfg_cmd(struct imx_header *imxhdr, int32_t cmd, char *token, char *name, int lineno, int fld, int dcd_len) { int value; static int cmd_ver_first = ~0; switch (cmd) { case CMD_IMAGE_VERSION: imximage_version = get_cfg_value(token, name, lineno); if (cmd_ver_first == 0) { fprintf(stderr, "Error: %s[%d] - IMAGE_VERSION " "command need be the first before other " "valid command in the file\n", name, lineno); exit(EXIT_FAILURE); } cmd_ver_first = 1; set_hdr_func(); break; case CMD_BOOT_FROM: imximage_ivt_offset = get_table_entry_id(imximage_boot_offset, "imximage boot option", token); if (imximage_ivt_offset == -1) { fprintf(stderr, "Error: %s[%d] -Invalid boot device" "(%s)\n", name, lineno, token); exit(EXIT_FAILURE); } imximage_init_loadsize = get_table_entry_id(imximage_boot_loadsize, "imximage boot option", token); if (imximage_init_loadsize == -1) { fprintf(stderr, "Error: %s[%d] -Invalid boot device(%s)\n", name, lineno, token); exit(EXIT_FAILURE); } /* * The SOC loads from the storage starting at address 0 * then ensures that the load size contains the offset */ if (imximage_init_loadsize < imximage_ivt_offset) imximage_init_loadsize = imximage_ivt_offset; if (unlikely(cmd_ver_first != 1)) cmd_ver_first = 0; break; case CMD_BOOT_OFFSET: imximage_ivt_offset = get_cfg_value(token, name, lineno); if (unlikely(cmd_ver_first != 1)) cmd_ver_first = 0; break; case CMD_WRITE_DATA: case CMD_WRITE_CLR_BIT: case CMD_WRITE_SET_BIT: case CMD_CHECK_BITS_SET: case CMD_CHECK_BITS_CLR: value = get_cfg_value(token, name, lineno); if (set_dcd_param) (*set_dcd_param)(imxhdr, dcd_len, cmd); (*set_dcd_val)(imxhdr, name, lineno, fld, value, dcd_len); if (unlikely(cmd_ver_first != 1)) cmd_ver_first = 0; break; case CMD_CSF: if (imximage_version != 2) { fprintf(stderr, "Error: %s[%d] - CSF only supported for VERSION 2(%s)\n", name, lineno, token); exit(EXIT_FAILURE); } imximage_csf_size = get_cfg_value(token, name, lineno); if (unlikely(cmd_ver_first != 1)) cmd_ver_first = 0; break; case CMD_PLUGIN: plugin_image = 1; copy_plugin_code(imxhdr, token); break; } }
int AccelSensor::gsensor_cfg() { FILE *fp; int name_match = 0; char buf[128] = {0}; char * val; if((fp = fopen(GSENSOR_CONFIG_PATH, "rb")) == NULL) { ALOGD("can't not open file!\n"); return 0; } while(fgets(buf, LINE_LENGTH, fp)) { if (!strncmp(buf, GSENSOR_NAME, strlen(GSENSOR_NAME))) { val = get_cfg_value(buf); #ifdef DEBUG_SENSOR ALOGD("val:%s\n",val); #endif name_match = (strncmp(val, gsensorInfo.sensorName, strlen(gsensorInfo.sensorName))) ? 0 : 1; if (name_match) { convert = (GRAVITY_EARTH/gsensorInfo.priData); #ifdef DEBUG_SENSOR ALOGD("lsg: %f,convert:%f", gsensorInfo.priData, convert); #endif memset(&buf, 0, sizeof(buf)); continue; } } if(name_match ==0){ memset(&buf, 0, sizeof(buf)); continue; }else if(name_match < 5){ name_match++; val = get_cfg_value(buf); #ifdef DEBUG_SENSOR ALOGD("val:%s\n", val); #endif if (!strncmp(buf,GSENSOR_DIRECTX, strlen(GSENSOR_DIRECTX))){ direct_x = (strncmp(val, TRUE,strlen(val))) ? convert * (-1) : convert; } if (!strncmp(buf, GSENSOR_DIRECTY, strlen(GSENSOR_DIRECTY))){ direct_y =(strncmp(val, TRUE,strlen(val))) ? convert * (-1) : convert; } if (!strncmp(buf, GSENSOR_DIRECTZ, strlen(GSENSOR_DIRECTZ))){ direct_z =(strncmp(val, TRUE,strlen(val))) ? convert * (-1) : convert; } if (!strncmp(buf,GSENSOR_XY, strlen(GSENSOR_XY))){ direct_xy = (strncmp(val, TRUE,strlen(val))) ? 0 : 1; } }else{ name_match = 0; break; } memset(&buf, 0, sizeof(buf)); } #ifdef DEBUG_SENSOR ALOGD("direct_x: %f,direct_y: %f,direct_z: %f,direct_xy:%d,sensor_name:%s \n", direct_x, direct_y, direct_z, direct_xy, gsensorInfo.sensorName); #endif if((direct_x == 0) || (direct_y == 0) || (direct_z == 0) || (direct_xy == (-1)) || (convert == 0.0)) { return 0; } fclose(fp); return 1; }
/**used by DoHTML for scanning some values in http-files and insert DATA and send them to browser**/ int handle_get(char *data, FILE *write_f) { char *var_index; char *sel_value='\0'; int if_prm = 1; static int loop_counter = 0; // used if loops exissted if(loop_counter > 10){ fprintf(write_f, "max loop counter reached\n"); return 0; } loop_counter++; // alarm(TIMEOUT);//RAW // free_page_mem(); //free memory of page includes //in search used parsestr1() char *search[] = {"<!--/ if=\"/[/*/]\"/ -->/,\n,", //0 "<!--/ else/ -->/,\n,", //1 "<!--/ //if/ -->/,\n,", //2 "<!--/ CGI:/ /[/*/]END_CGI/ -->", //3 "??/[/*/]??", //4 "<!--/ #include/ /[/*/]-->/,\n,", "<!--/ TABLE:/ /[/*/]END_TABLE/ -->", //6 // "<input/ type=\"/[/*/]\"", //maybe replace via 4 "<input/ type=\"radio\"", "<select/*name=\"/[/*/]\"", //8 "<option/*value=\"/[/*/]\"", "<!--/*-->", NULL}; int i = 0; char *ptr, *file_head; while(*data){ if(*data == *search[i] && (var_index = parsestr1(data+1, search[i]+1))){ ptr = point[1]; //do something with i. switch(i){ case 0: if(cfg_arg_strcmp(var_index, 0)){ //compare WEB_NAME //not matching, skip if_prm = 0; } else // is matching, print if_prm = 1; break; case 1: if_prm = !if_prm; //invers break; case 2: //is matching, print if_prm = 1; break; } if(if_prm) switch(i){ case 3: //CGI script parse_cgi_script(var_index); point[1] = ptr; case 4: //show variables value file_head = get_var(NULL, var_index); if(file_head) print(write_f, file_head);/*fprintf(write_f,"%s", file_head);*/ #ifdef DEBUG printf(" Var_index %s file_head %s\n", var_index, file_head); #endif point[1] = ptr; break; case 5: //include descriptor include_(data, var_index, write_f); point[1] = ptr; break; case 6: //table parse_tbl(var_index); point[1] = ptr; break; case 7: //input-form-atribute /* if (!strcmp(var_index, "text") || !strcmp(var_index, "password") || !strcmp(var_index, "hidden")) //main used for def. input text text_value_insert(file_head, point[1], write_f); // text_value_insert(file_head, ptr, write_f); else */ // if (!strcmp(var_index, "radio")) radio_value_insert(data, point[1], write_f); // else fprintf(write_f,"%s\"", data); break; case 8: //select-form-attribute // find there is a 'select drop-down list' in this line and insert the value for displaying fprintf(write_f,"%s\"", data); sel_value = get_cfg_value(NULL, var_index, 0); break; case 9: //option-form-attribute fprintf(write_f,"%s\"", data); if(sel_value && strcmp(sel_value,var_index)==0) fprintf(write_f, " selected"); #ifdef DEBUG printf("select_value_insert: %s, =? value: %s\n", var_index, sel_value); #endif break; case 10: break;//comments not show!! } data = point[1]; i = 0; //printf("INDEX %d\n", i); } else { i++; // if(!if_prm && (i==4)) {i= 0;continue;}//if_prm ==0 =>check only first three lines if(search[i]) continue; i = 0; // if(if_prm) fprintf(write_f,"%c", *file_head); if(if_prm) putc(*data, write_f); data++; } } loop_counter--; // printf("Time to ALARM: %d\n", alarm(0));//RAW return 0; }
char *get_var(unsigned long long *size_ptr, char *var_index){ char *ptr = NULL; unsigned long long size = 0; //if Zero - not write able if(*var_index == '_'){ /* global variables */ var_index++; if(*var_index == '_'){ //??__variable?? - show environment variable var_index++; ptr = getenv(var_index); }else if(*var_index == '#'){ //??_#variable?? - show command variable index.html?variable=5 var_index++; if(*var_index == '#'){ //??_##variable?? - show local command variable index.html?variable=5 var_index++; return get_arg(var_index, size_ptr, 1); } return get_arg(var_index, size_ptr, 0); // if(ptr) size = strlen(ptr) + 1;//for remove_show_chars needed }else if(*var_index == '%'){ //??_%variable?? - show new_variable var_index++; return get_cfg_value(size_ptr, var_index, 1); }else if(*var_index == '&'){ //??_&variable?? - show fresh_variable var_index++; return get_cfg_value(size_ptr, var_index, 2); }else if(*var_index == '@'){ //??_@variable?? - show variable from rnd table var_index++; ptr = get_tbl(var_index); }else if(*var_index == '?'){ //??_?file|expression?? -> in file this expression var_index++; FILE *fip; char *ptr1; ptr1 = w_strtok(&var_index, '|'); if (ptr1){ if((fip = fopen(ptr1,"r")) == NULL) printf("No file: %s\n", ptr1); else{ while(fgets(copybuf,sizeof(copybuf),fip) != NULL){ if((ptr1 = parsestr1_(copybuf,var_index)) != NULL){ ptr = ptr1; break; } } fclose(fip); } } return ptr; } else if(!strcmp(var_index,"referer")){ ptr = referer; } else if(!strcmp(var_index,"short_referer")){ /* ptr = ""; char *c = referer; //get only name of html while (*c){ if(*c == '/') ptr = c + 1; c++; } */ ptr = parsestr1_(referer, "/L/L"); //get the last '/' }else if(!strcmp(var_index,"user_agent")){ ptr = user_agent; }else if(!strcmp(var_index,"ip")){ ptr = ip; size = 20; }else if(!strcmp(var_index,"port")){ ptr = port; size = 10; }else if(!strcmp(var_index,"srv_ip")){ ptr = CONFIG.IP; }else if(!strcmp(var_index,"srv_port")){ ptr = CONFIG.ADMIN_PORT; }else if(!strcmp(var_index,"dns_name")){ ptr = dns_name; }else if(!strcmp(var_index,"etc_save")){ ptr = etc_save; size = 2; }else if(!strcmp(var_index,"file_name")){ ptr = file; }else if(!strcmp(var_index,"buf")){ ptr = buf; size = 16384; } }/*end of global variables*/ else return get_cfg_value(size_ptr, var_index, 0); /*if not found - return NULL*/ if(size_ptr) *size_ptr = size; return ptr; }