static void log_c_test (const char *filename, const char *action) { char *source; char **lines; int i; source = jb_read_file_or_exit(filename); lines = g_strsplit(source, "\n", 0); g_free(source); jb_log("attempting to %s program %s:", action, filename); for (i = 0; lines[i] != NULL; i++) { const char *line = lines[i]; /* do not output a spurious empty last line */ if (*line == '\0' && lines[i + 1] == NULL) break; jb_log("%4i %s", i + 1, lines[i]); } jb_log(JB_SEPARATOR); g_strfreev(lines); }
void jb_subst (const char *infile, const char *outfile, GHashTable *variables) { char *contents; char *result; char *tmp_outfile; g_return_if_fail(infile != NULL); g_return_if_fail(outfile != NULL); g_return_if_fail(variables != NULL); contents = jb_read_file_or_exit(infile); result = subst_real(contents, variables); g_free(contents); tmp_outfile = g_strdup_printf("%s.tmp", outfile); jb_write_file_or_exit(tmp_outfile, result); g_free(result); jb_rename(tmp_outfile, outfile); g_free(tmp_outfile); }