diff --git a/src/frontend/inpcom.c b/src/frontend/inpcom.c index cb03a9184..ecc63e343 100644 --- a/src/frontend/inpcom.c +++ b/src/frontend/inpcom.c @@ -971,10 +971,7 @@ inp_chk_for_multi_in_vcvs(struct line *deck, int *line_number) (bool_ptr = strstr(line, "or(")) != NULL) { str_ptr1 = skip_non_ws(line); - keep = *str_ptr1; - *str_ptr1 = '\0'; - model_name = strdup(line); - *str_ptr1 = keep; + model_name = copy_substring(line, str_ptr1); str_ptr1 = skip_ws(str_ptr1); str_ptr2 = skip_back_ws(bool_ptr - 1) + 1; @@ -986,9 +983,7 @@ inp_chk_for_multi_in_vcvs(struct line *deck, int *line_number) str_ptr1 = bool_ptr + 1; while (*str_ptr1 != '(') str_ptr1++; - *str_ptr1 = '\0'; - fcn_name = strdup(bool_ptr); - *str_ptr1 = '('; + fcn_name = copy_substring(bool_ptr, str_ptr1); str_ptr1 = strstr(str_ptr1, ")"); comma_ptr = str_ptr2 = strstr(line, ","); if ((str_ptr1 == NULL)|| (str_ptr1 == NULL)) { @@ -1272,27 +1267,20 @@ get_instance_subckt(char *line) static char* get_subckt_model_name(char *line) { - char *name, *end_ptr, *subckt_name; - char keep; + char *name, *end_ptr; name = skip_non_ws(line); // eat .subckt|.model name = skip_ws(name); end_ptr = skip_non_ws(name); - keep = *end_ptr; - *end_ptr = '\0'; - - subckt_name = strdup(name); - *end_ptr = keep; - - return subckt_name; + return copy_substring(name, end_ptr); } static char* get_model_name(char *line, int num_terminals) { - char *beg_ptr, *end_ptr, keep, *model_name; + char *beg_ptr, *end_ptr; int i = 0; beg_ptr = skip_non_ws(line); /* eat device name */ @@ -1309,14 +1297,7 @@ get_model_name(char *line, int num_terminals) } end_ptr = skip_non_ws(beg_ptr); - keep = *end_ptr; - *end_ptr = '\0'; - - model_name = strdup(beg_ptr); - - *end_ptr = keep; - - return model_name; + return copy_substring(beg_ptr, end_ptr); } @@ -1338,16 +1319,11 @@ get_model_type(char *line) static char * get_adevice_model_name(char *line) { - char *model_name, *ptr_end, *ptr_beg, keep; + char *ptr_end, *ptr_beg; ptr_end = skip_back_ws(line + strlen(line) - 1) + 1; ptr_beg = skip_back_non_ws(ptr_end - 1) + 1; - keep = *ptr_end; - *ptr_end = '\0'; - model_name = strdup(ptr_beg); - *ptr_end = keep; - - return model_name; + return copy_substring(ptr_beg, ptr_end); } @@ -2019,12 +1995,7 @@ inp_fix_subckt(char *s) for (ptr2 = ptr1; *ptr2 && !isspace(*ptr2) && !isquote(*ptr2); ptr2++) ; - keep = *ptr2; - *ptr2 = '\0'; - - subckt_w_params[num_subckt_w_params++] = strdup(ptr1); - - *ptr2 = keep; + subckt_w_params[num_subckt_w_params++] = copy_substring(ptr1, ptr2); /* go to beginning of first parameter word */ /* s will contain only subckt definition */ @@ -2387,8 +2358,6 @@ inp_init_lib_data(void) static char* inp_get_subckt_name(char *s) { - char *subckt_name_copy; - char keep; char *subckt_name, *end_ptr = strstr(s, "="); if (end_ptr) { @@ -2401,14 +2370,7 @@ inp_get_subckt_name(char *s) end_ptr = skip_back_ws(end_ptr - 1) + 1; subckt_name = skip_back_non_ws(end_ptr - 1) + 1; - keep = *end_ptr; - *end_ptr = '\0'; - - subckt_name_copy = strdup(subckt_name); - - *end_ptr = keep; - - return subckt_name_copy; + return copy_substring(subckt_name, end_ptr); } @@ -2442,10 +2404,7 @@ inp_get_params(char *line, char *param_names[], char *param_values[]) end = name + 1; name = skip_back_non_ws(name) + 1; - keep = *end; - *end = '\0'; - param_names[num_params++] = strdup(name); - *end = keep; + param_names[num_params++] = copy_substring(name, end); /* get parameter value */ value = skip_ws(equal_ptr + 1); @@ -2486,14 +2445,10 @@ inp_fix_inst_line(char *inst_line, { char *end, *inst_name, *inst_name_end; char *curr_line = inst_line, *new_line = NULL; - char keep; int i, j; inst_name_end = skip_non_ws(inst_line); - keep = *inst_name_end; - *inst_name_end = '\0'; - inst_name = strdup(inst_line); - *inst_name_end = keep; + inst_name = copy_substring(inst_line, inst_name_end); end = strstr(inst_line, "="); if (end) { @@ -3762,7 +3717,6 @@ inp_add_params_to_subckt(struct line *subckt_card) char *curr_line = card->li_line; char *subckt_line = subckt_card->li_line; char *new_line, *param_ptr, *subckt_name, *end_ptr; - char keep; while (card != NULL && ciprefix(".param", curr_line)) { param_ptr = strstr(curr_line, " "); @@ -3775,10 +3729,7 @@ inp_add_params_to_subckt(struct line *subckt_card) subckt_name = skip_non_ws(subckt_card->li_line); subckt_name = skip_ws(subckt_name); end_ptr = skip_non_ws(subckt_name); - keep = *end_ptr; - *end_ptr = '\0'; - subckt_w_params[num_subckt_w_params++] = strdup(subckt_name); - *end_ptr = keep; + subckt_w_params[num_subckt_w_params++] = copy_substring(subckt_name, end_ptr); } else { new_line = TMALLOC(char, strlen(subckt_line) + strlen(param_ptr) + 2); sprintf(new_line, "%s %s", subckt_line, param_ptr);