Index: filldata.cpp
===================================================================
--- filldata.cpp	(revision 27086)
+++ filldata.cpp	(working copy)
@@ -430,35 +430,61 @@
 
     QByteArray tmp = command.toAscii();
     int systemcall_status = system(tmp.constData());
-    bool succeeded = WIFEXITED(systemcall_status) &&
-         WEXITSTATUS(systemcall_status) == 0;
 
     VERBOSE(VB_XMLTV,
             "------------------ End of XMLTV output ------------------");
 
     updateLastRunEnd(query);
 
-    status = QObject::tr("Successful.");
-
-    if (!succeeded)
+    bool succeeded = false;
+  
+    if (WIFEXITED(systemcall_status))
     {
-        if (WIFSIGNALED(systemcall_status) &&
-            (WTERMSIG(systemcall_status) == SIGINT
-            || WTERMSIG(systemcall_status) == SIGQUIT))
+        if (WEXITSTATUS(systemcall_status) == 0)
         {
-            interrupted = true;
-            status = QString(QObject::tr("FAILED: xmltv ran but was interrupted."));
+            succeeded = true;
+            status = QObject::tr("Successful.");
         }
         else
         {
-            status = QString(QObject::tr("FAILED: xmltv returned error code %1."))
-                            .arg(systemcall_status);
-            VERBOSE(VB_IMPORTANT, LOC_ERR +
-                    QString("xmltv returned error code %1")
-                    .arg(systemcall_status));
+            status = QObject::tr("xmltv exited with non-zero exit status %1.")
+                .arg(WEXITSTATUS(systemcall_status));
         }
     }
+    else if (WIFSIGNALED(systemcall_status))
+    {
+        if (WTERMSIG(systemcall_status) == SIGINT
+            || WTERMSIG(systemcall_status) == SIGQUIT)
+        {
+            interrupted = true;
+            status = QObject::tr("xmltv ran but was interrupted.");
+         }
+        else
+        {
+            status = QObject::tr("xmltv killed by signal %1.")
+                .arg(WTERMSIG(systemcall_status));
+        }
+    }
+    else
+    {                // cannot parse the status; this shouldn't happen
+        status = QObject::tr("xmltv exited with termination status %1.")
+            .arg(systemcall_status);
+    }
+    
+    if (WCOREDUMP(systemcall_status))
+    {
+        status += QObject::tr(" (Core dumped.)");
+    }
 
+    if (!succeeded)
+    {
+        if (!interrupted)
+        {
+            VERBOSE(VB_IMPORTANT, LOC_ERR + status);
+        }
+        status.prepend(QObject::tr("FAILED: "));
+    }
+
     updateLastRunStatus(query, status);
 
     succeeded &= GrabDataFromFile(source.id, filename);
