gboolean url_addrspec_end (const char *in, const char *pos, const char *inend, urlmatch_t *match) { const char *inptr = pos; int parts = 0, digits; gboolean got_dot = FALSE; g_assert (*inptr == '@'); inptr++; if (*inptr == '[') { /* domain literal */ do { inptr++; digits = 0; while (inptr < inend && is_digit (*inptr) && digits < 3) { inptr++; digits++; } parts++; if (*inptr != '.' && parts != 4) return FALSE; } while (parts < 4); if (inptr < inend && *inptr == ']') inptr++; else return FALSE; got_dot = TRUE; } else { while (inptr < inend) { if (is_domain (*inptr)) inptr++; else break; while (inptr < inend && is_domain (*inptr)) inptr++; if (inptr < inend && *inptr == '.' && is_domain (inptr[1])) { if (*inptr == '.') got_dot = TRUE; inptr++; } } } if (inptr == pos + 1 || !got_dot) return FALSE; match->um_eo = (inptr - in); return TRUE; }
static void check_arguments(int line, char *args[], int count, mipv6_conf_item_t *item) { int i; for (i = 0; i < count; i++) { switch (item->params[i]) { case MIPV6_PARAM_T_INT: check_argument(is_int(args[i + 1]), "integer", args[0], i, line); break; case MIPV6_PARAM_T_BOOLEAN: check_argument(is_boolean(args[i + 1]), "boolean", args[0], i, line); break; case MIPV6_PARAM_T_ONOFF: check_argument(is_onoff(args[i + 1]), "on/off", args[0], i, line); break; case MIPV6_PARAM_T_IDENTIFIER: check_argument(is_identifier(args[i + 1]), "identifier", args[0], i, line); break; case MIPV6_PARAM_T_ADDRESS: check_argument(is_address(args[i + 1]), "address", args[0], i, line); break; case MIPV6_PARAM_T_PREFIX: check_argument(is_prefix(args[i + 1]), "prefix", args[0], i, line); break; case MIPV6_PARAM_T_DOMAIN: check_argument(is_domain(args[i + 1], 0), "domain name" " or address", args[0], i, line); break; case MIPV6_PARAM_T_NAI: check_argument(is_nai(args[i + 1]), "NAI", args[0], i, line); break; default: break; } } }
static int is_nai(const char *in) { char *buf, *at; int res = 1; /* strdup here... */ buf = strdup(in); at = strchr(buf, '@'); if (at) { (*at) = 0; res = is_domain(at + 1, 1); } if (res) res = is_nai_username(buf); free(buf); return res; }
gboolean camel_url_web_end (const gchar *in, const gchar *pos, const gchar *inend, urlmatch_t *match) { register const gchar *inptr = pos; gboolean passwd = FALSE; const gchar *save; gchar close_brace, open_brace; gint brace_stack = 0; gint port; inptr += strlen (match->pattern); close_brace = url_stop_at_brace (in, match->um_so, &open_brace); /* find the end of the domain */ if (is_atom (*inptr)) { /* might be a domain or user@domain */ save = inptr; while (inptr < inend) { if (!is_atom (*inptr)) break; inptr++; while (inptr < inend && is_atom (*inptr)) inptr++; if ((inptr + 1) < inend && *inptr == '.' && (is_atom (inptr[1]) || inptr[1] == '/')) inptr++; } if (*inptr != '@') inptr = save; else inptr++; goto domain; } else if (is_domain (*inptr)) { domain: while (inptr < inend) { if (!is_domain (*inptr)) break; inptr++; while (inptr < inend && is_domain (*inptr)) inptr++; if ((inptr + 1) < inend && *inptr == '.' && (is_domain (inptr[1]) || inptr[1] == '/')) inptr++; } } else { return FALSE; } if (inptr < inend) { switch (*inptr) { case ':': /* we either have a port or a password */ inptr++; if (is_digit (*inptr) || passwd) { port = (*inptr++ - '0'); while (inptr < inend && is_digit (*inptr) && port < 65536) port = (port * 10) + (*inptr++ - '0'); if (!passwd && (port >= 65536 || *inptr == '@')) { if (inptr < inend) { /* this must be a password? */ goto passwd; } inptr--; } } else { passwd: passwd = TRUE; save = inptr; while (inptr < inend && is_atom (*inptr)) inptr++; if ((inptr + 2) < inend) { if (*inptr == '@') { inptr++; if (is_domain (*inptr)) goto domain; } return FALSE; } } if (inptr >= inend || *inptr != '/') break; /* we have a '/' so there could be a path - fall through */ case '/': /* we've detected a path component to our url */ inptr++; case '?': while (inptr < inend && is_urlsafe (*inptr)) { if (*inptr == open_brace) { brace_stack++; } else if (*inptr == close_brace) { brace_stack--; if (brace_stack == -1) break; } inptr++; } break; default: break; } } /* urls are extremely unlikely to end with any * punctuation, so strip any trailing * punctuation off. Also strip off any closing * double-quotes. */ while (inptr > pos && strchr (",.:;?!-|}])\"", inptr[-1])) inptr--; match->um_eo = (inptr - in); return TRUE; }
int run_simulation(struct simulation *sim) { struct device cell; log_clear(sim); printf_log(sim,_("Run_simulation\n")); device_init(&cell); cell.onlypos=FALSE; dump_init(sim,&cell); set_dump_status(sim,dump_stop_plot, FALSE); set_dump_status(sim,dump_print_text, TRUE); char temp[1000]; cell.kl_in_newton=FALSE; //if (strcmp(outputpath,"")!=0) strcpy(get_output_path(sim),outputpath); //if (strcmp(inputpath,"")!=0) strcpy(get_input_path(sim),inputpath); dump_load_config(sim,&cell); int i; int z; int x; int y; join_path(2,temp,get_output_path(sim),"error.dat"); remove(temp); join_path(2,temp,get_output_path(sim),"equilibrium"); remove_dir(sim,temp); join_path(2,temp,get_output_path(sim),"snapshots"); remove_dir(sim,temp); join_path(2,temp,get_output_path(sim),"light_dump"); remove_dir(sim,temp); join_path(2,temp,get_output_path(sim),"dynamic"); remove_dir(sim,temp); join_path(2,temp,get_output_path(sim),"frequency"); remove_dir(sim,temp); load_config(sim,&cell); if (strcmp(sim->force_sim_mode,"")!=0) { strcpy(cell.simmode,sim->force_sim_mode); } if (strcmp(cell.simmode,"opticalmodel@optics")!=0) { solver_init(sim,cell.solver_name); newton_init(sim,cell.newton_name); printf_log(sim,_("Loading DoS for %d layers\n"),cell.my_epitaxy.electrical_layers); char tempn[100]; char tempp[100]; i=0; for (i=0;i<cell.my_epitaxy.electrical_layers;i++) { dos_init(&cell,i); printf_log(sim,"Load DoS %d/%d\n",i,cell.my_epitaxy.electrical_layers); sprintf(tempn,"%s_dosn.dat",cell.my_epitaxy.dos_file[i]); sprintf(tempp,"%s_dosp.dat",cell.my_epitaxy.dos_file[i]); load_dos(sim,&cell,tempn,tempp,i); } device_alloc_traps(&cell); if (get_dump_status(sim,dump_write_converge)==TRUE) { sim->converge = fopena(get_output_path(sim),"converge.dat","w"); fclose(sim->converge); sim->tconverge=fopena(get_output_path(sim),"tconverge.dat","w"); fclose(sim->tconverge); } mesh_cal_layer_widths(&cell); long double depth=0.0; long double percent=0.0; long double value=0.0; for (z=0;z<cell.zmeshpoints;z++) { for (x=0;x<cell.xmeshpoints;x++) { for (y=0;y<cell.ymeshpoints;y++) { depth=cell.ymesh[y]-cell.layer_start[cell.imat[z][x][y]]; percent=depth/cell.layer_width[cell.imat[z][x][y]]; cell.Nad[z][x][y]=get_dos_doping_start(&cell,cell.imat[z][x][y])+(get_dos_doping_stop(&cell,cell.imat[z][x][y])-get_dos_doping_start(&cell,cell.imat[z][x][y]))*percent; } } } init_mat_arrays(&cell); for (z=0;z<cell.zmeshpoints;z++) { for (x=0;x<cell.xmeshpoints;x++) { for (y=0;y<cell.ymeshpoints;y++) { cell.phi[z][x][y]=0.0; cell.R[z][x][y]=0.0; cell.n[z][x][y]=0.0; } } } contacts_load(sim,&cell); cell.C=cell.xlen*cell.zlen*epsilon0*cell.epsilonr[0][0][0]/(cell.ylen+cell.other_layers); if (get_dump_status(sim,dump_print_text)==TRUE) printf_log(sim,"C=%Le\n",cell.C); cell.A=cell.xlen*cell.zlen; cell.Vol=cell.xlen*cell.zlen*cell.ylen; ///////////////////////light model char old_model[100]; gdouble old_Psun=0.0; old_Psun=light_get_sun(&cell.mylight); light_init(&cell.mylight); light_set_dx(&cell.mylight,cell.ymesh[1]-cell.ymesh[0]); light_load_config(sim,&cell.mylight); if (cell.led_on==TRUE) { strcpy(old_model,cell.mylight.mode); strcpy(cell.mylight.mode,"ray"); } light_load_dlls(sim,&cell.mylight); light_setup_ray(sim,&cell,&cell.mylight); if (cell.led_on==TRUE) { cell.mylight.force_update=TRUE; light_set_sun(&(cell.mylight),1.0); light_set_sun_delta_at_wavelength(&(cell.mylight),cell.led_wavelength); light_solve_all(sim,&(cell.mylight)); cell.mylight.force_update=FALSE; strcpy(cell.mylight.mode,old_model); light_set_sun(&(cell.mylight),old_Psun); light_free_dlls(sim,&cell.mylight); light_load_dlls(sim,&cell.mylight); } /////////////////////// //update_arrays(&cell); contact_set_all_voltages(sim,&cell,0.0); get_initial(sim,&cell); remesh_shrink(&cell); if (cell.math_enable_pos_solver==TRUE) { for (z=0;z<cell.zmeshpoints;z++) { for (x=0;x<cell.xmeshpoints;x++) { solve_pos(sim,&cell,z,x); } } } time_init(sim,&cell); cell.N=0; cell.M=0; solver_realloc(sim,&cell); plot_open(sim); cell.go_time=FALSE; plot_now(sim,"plot"); //set_solver_dump_every_matrix(1); find_n0(sim,&cell); //set_solver_dump_every_matrix(0); draw_gaus(&cell); if (cell.onlypos==TRUE) { join_path(2,temp,get_output_path(sim),"equilibrium"); dump_1d_slice(sim,&cell,temp); device_free(sim,&cell); device_free_traps(&cell); mesh_free(sim,&cell); return 0; } } //Load the dll if (is_domain(cell.simmode)!=0) { char gussed_full_mode[200]; if (guess_whole_sim_name(sim,gussed_full_mode,get_input_path(sim),cell.simmode)==0) { printf_log(sim,"I guess we are using running %s\n",gussed_full_mode); strcpy(cell.simmode,gussed_full_mode); }else { ewe(sim,"I could not guess which simulation to run from the mode %s\n",cell.simmode); } } run_electrical_dll(sim,&cell,strextract_domain(cell.simmode)); if (strcmp(cell.simmode,"opticalmodel@optics")!=0) { device_free(sim,&cell); device_free_traps(&cell); mesh_free(sim,&cell); plot_close(sim); for (i=0;i<cell.my_epitaxy.electrical_layers;i++) { dos_free(&cell,i); } solver_free_memory(sim,&cell); newton_interface_free(sim); light_free(sim,&cell.mylight); } return cell.odes; }
gboolean url_web_end (const char *in, const char *pos, const char *inend, urlmatch_t *match) { register const char *inptr = pos; gboolean openbracket = FALSE; gboolean passwd = FALSE; const char *save; char close_brace; int port, val, n; char *end; inptr += strlen (match->pattern); close_brace = url_stop_at_brace (in, match->um_so); /* find the end of the domain */ if (is_digit (*inptr)) { goto ip_literal2; } else if (is_atom (*inptr)) { /* might be a domain or user@domain */ save = inptr; while (inptr < inend) { if (!is_atom (*inptr)) break; inptr++; while (inptr < inend && is_atom (*inptr)) inptr++; if ((inptr + 1) < inend && *inptr == '.' && is_atom (inptr[1])) inptr++; } if (*inptr != '@') inptr = save; else inptr++; if (*inptr == '[') { /* IPv6 (or possibly IPv4) address literal */ goto ip_literal; } if (is_domain (*inptr)) { /* domain name or IPv4 address */ goto domain; } } else if (*inptr == '[') { ip_literal: openbracket = TRUE; inptr++; if (is_digit (*inptr)) { ip_literal2: /* could be IPv4 or IPv6 */ if ((val = strtol (inptr, &end, 10)) < 0) return FALSE; } else if ((*inptr >= 'A' && *inptr <= 'F') || (*inptr >= 'a' && *inptr <= 'f')) { /* IPv6 address literals are in hex */ if ((val = strtol (inptr, &end, 16)) < 0 || *end != ':') return FALSE; } else if (*inptr == ':') { /* IPv6 can start with a ':' */ end = (char *) inptr; val = 256; /* invalid value */ } else { return FALSE; } switch (*end) { case '.': /* IPv4 address literal */ n = 1; do { if (val > 255 || *end != '.') return FALSE; inptr = end + 1; if ((val = strtol (inptr, &end, 10)) < 0) return FALSE; n++; } while (n < 4); if (val > 255 || n < 4 || (openbracket && *end != ']')) return FALSE; inptr = end + 1; break; case ':': /* IPv6 address literal */ if (!openbracket) return FALSE; do { if (end[1] != ':') { inptr = end + 1; if ((val = strtol (inptr, &end, 16)) < 0) return FALSE; } else { inptr = end; end++; } } while (end > inptr && *end == ':'); if (*end != ']') return FALSE; inptr = end + 1; break; default: return FALSE; } } else if (is_domain (*inptr)) { domain: while (inptr < inend) { if (!is_domain (*inptr)) break; inptr++; while (inptr < inend && is_domain (*inptr)) inptr++; if ((inptr + 1) < inend && *inptr == '.' && (is_domain (inptr[1]) || inptr[1] == '/')) inptr++; } } else { return FALSE; } if (inptr < inend) { switch (*inptr) { case ':': /* we either have a port or a password */ inptr++; if (is_digit (*inptr) || passwd) { port = (*inptr++ - '0'); while (inptr < inend && is_digit (*inptr) && port < 65536) port = (port * 10) + (*inptr++ - '0'); if (!passwd && (port >= 65536 || *inptr == '@')) { if (inptr < inend) { /* this must be a password? */ goto passwd; } inptr--; } } else { passwd: passwd = TRUE; save = inptr; while (inptr < inend && is_atom (*inptr)) inptr++; if ((inptr + 2) < inend) { if (*inptr == '@') { inptr++; if (is_domain (*inptr)) goto domain; } return FALSE; } } if (inptr >= inend || *inptr != '/') break; /* we have a '/' so there could be a path - fall through */ case '/': /* we've detected a path component to our url */ inptr++; while (inptr < inend && is_urlsafe (*inptr) && *inptr != close_brace) inptr++; break; default: break; } } /* urls are extremely unlikely to end with any * punctuation, so strip any trailing * punctuation off. Also strip off any closing * braces or quotes. */ while (inptr > pos && strchr (",.:;?!-|)}]'\"", inptr[-1])) inptr--; match->um_eo = (inptr - in); return TRUE; }