uniqstr uniqstr_vsprintf (char const *format, ...) { va_list args; size_t length; va_start (args, format); length = vsnprintf (NULL, 0, format, args); va_end (args); char res[length + 1]; va_start (args, format); vsprintf (res, format, args); va_end (args); return uniqstr_new (res); }
void boundary_set_from_string (boundary *bound, char *loc_str) { /* Must search in reverse since the file name field may * contain `.' or `:'. */ char *delim = _mbsrchr (loc_str, '.'); aver (delim); *delim = '\0'; bound->column = atoi (delim+1); delim = _mbsrchr (loc_str, ':'); aver (delim); *delim = '\0'; bound->line = atoi (delim+1); bound->file = uniqstr_new (loc_str); }
uniqstr uniqstr_vsprintf (char const *format, ...) { char *res = NULL; va_list args; size_t length; uniqstr result; va_start (args, format); length = vsnprintf (NULL, 0, format, args); va_end (args); res = malloc(sizeof(char)*(length+1)); //char res[length + 1]; va_start (args, format); vsprintf (res, format, args); va_end (args); result = uniqstr_new (res); free(res); return result;//uniqstr_new (res); }