summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-03-31 22:26:41 +0400
committerAlexander Gavrilov2012-03-31 22:26:41 +0400
commit9d6e26fa5fe6781d0650c14a7302981415680de9 (patch)
treeb6b8a5f203486b33311519a0c3150fbb46645e77
parent0f41608ed4b808205dd8734bbc52de64f6501c98 (diff)
downloaddfhack-9d6e26fa5fe6781d0650c14a7302981415680de9.tar.gz
dfhack-9d6e26fa5fe6781d0650c14a7302981415680de9.tar.bz2
dfhack-9d6e26fa5fe6781d0650c14a7302981415680de9.tar.xz
Fix crashing color_ostream::printerr due to vfprintf vs fprintf mixup.
Also enable heap clearing in gdb mode, and fix a few newlines.
-rw-r--r--library/ColorText.cpp2
-rwxr-xr-xpackage/linux/dfhack1
-rw-r--r--plugins/workflow.cpp6
3 files changed, 5 insertions, 4 deletions
diff --git a/library/ColorText.cpp b/library/ColorText.cpp
index 5d6e1d82..2811a711 100644
--- a/library/ColorText.cpp
+++ b/library/ColorText.cpp
@@ -125,7 +125,7 @@ void color_ostream::vprinterr(const char *format, va_list args)
color_value save = cur_color;
if (log_errors_to_stderr)
- fprintf(stderr, format, args);
+ vfprintf(stderr, format, args);
color(COLOR_LIGHTRED);
vprint(format, args);
diff --git a/package/linux/dfhack b/package/linux/dfhack
index 3e5a0d80..3f624c2a 100755
--- a/package/linux/dfhack
+++ b/package/linux/dfhack
@@ -41,6 +41,7 @@ case "$1" in
-g | --gdb)
shift
echo "set environment LD_PRELOAD=./hack/libdfhack.so" > gdbcmd.tmp
+ echo "set environment MALLOC_PERTURB_=45" >> gdbcmd.tmp
gdb $DF_GDB_OPTS -x gdbcmd.tmp ./libs/Dwarf_Fortress $*
rm gdbcmd.tmp
ret=$?
diff --git a/plugins/workflow.cpp b/plugins/workflow.cpp
index 532665c7..e408df50 100644
--- a/plugins/workflow.cpp
+++ b/plugins/workflow.cpp
@@ -500,7 +500,7 @@ static bool recover_job(color_ostream &out, ProtectedJob *pj)
pj->holder = df::building::find(pj->building_id);
if (!pj->holder)
{
- out.printerr("Forgetting job %d (%s): holder building lost.",
+ out.printerr("Forgetting job %d (%s): holder building lost.\n",
pj->id, ENUM_KEY_STR(job_type, pj->job_copy->job_type).c_str());
forget_job(out, pj);
return true;
@@ -509,7 +509,7 @@ static bool recover_job(color_ostream &out, ProtectedJob *pj)
// Check its state and postpone or cancel if invalid
if (pj->holder->jobs.size() >= 10)
{
- out.printerr("Forgetting job %d (%s): holder building has too many jobs.",
+ out.printerr("Forgetting job %d (%s): holder building has too many jobs.\n",
pj->id, ENUM_KEY_STR(job_type, pj->job_copy->job_type).c_str());
forget_job(out, pj);
return true;
@@ -532,7 +532,7 @@ static bool recover_job(color_ostream &out, ProtectedJob *pj)
{
deleteJobStruct(recovered);
- out.printerr("Inconsistency: job %d (%s) already in list.",
+ out.printerr("Inconsistency: job %d (%s) already in list.\n",
pj->id, ENUM_KEY_STR(job_type, pj->job_copy->job_type).c_str());
return true;
}