char *Sagan_Var_To_Value(char *instring) { char *ptmp = NULL; char *tok = NULL; char tmp[1024] = { 0 }; char tmp2[1024] = { 0 }; char tmp3[1024] = { 0 }; char tmp_result[1024] = { 0 }; char *tmpbuf = NULL; int i=0; snprintf(tmp, sizeof(tmp), "%s", instring); // Segfault with strlcpy tmpbuf = tmp; for (i=0; i<counters->var_count; i++) { ptmp = strtok_r(tmp, " ", &tok); while (ptmp != NULL ) { strlcpy(tmp2, Replace_String(ptmp, var[i].var_name, var[i].var_value), sizeof(tmp2)); snprintf(tmp3, sizeof(tmp3), "%s ", tmp2); strlcat(tmp_result, tmp3, sizeof(tmp_result)); ptmp = strtok_r(NULL, " ", &tok); } strlcpy(tmp, tmp_result, sizeof(tmp)); tmpbuf = tmp; strlcpy(tmp_result, "", sizeof(tmp_result)); } return(tmpbuf); }
void Var_To_Value(char *in_str, char *str, size_t size) { char *ptmp = NULL; char *tok = NULL; char tmp2[MAX_VAR_VALUE_SIZE] = { 0 }; char tmp3[MAX_VAR_VALUE_SIZE] = { 0 }; char tmp_result[MAX_VAR_VALUE_SIZE] = { 0 }; char tmp[MAX_VAR_VALUE_SIZE] = { 0 }; int i=0; snprintf(tmp, sizeof(tmp), "%s", in_str); /* Segfault with strlcpy */ for (i=0; i<counters->var_count; i++) { ptmp = strtok_r(tmp, " ", &tok); while (ptmp != NULL ) { Replace_String(ptmp, var[i].var_name, var[i].var_value, tmp2, sizeof(tmp2)); snprintf(tmp3, sizeof(tmp3), "%s ", tmp2); strlcat(tmp_result, tmp3, sizeof(tmp_result)); ptmp = strtok_r(NULL, " ", &tok); } strlcpy(tmp, tmp_result, sizeof(tmp)); memset(tmp_result, 0, sizeof(tmp_result)); } tmp[strlen(tmp)-1] = 0; /* Remove trailing space */ snprintf(str, size, "%s", tmp); }