]> granicus.if.org Git - check/commitdiff
Fixed message for nofork failures.
authorhugo303 <hugo303@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 14 May 2004 12:11:16 +0000 (12:11 +0000)
committerhugo303 <hugo303@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 14 May 2004 12:11:16 +0000 (12:11 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@158 64e312b2-a51f-0410-8e61-82d0ca0eb02a

check/src/check_pack.c
check/src/check_pack.h

index c1c49a0d19a2dbc1dfd4be050db3588c5817e099..c9af9037495e0ba755fe44cbf1e0507aefe93956 100644 (file)
@@ -306,12 +306,23 @@ static int get_result (char *buf, RcvMsg *rmsg)
     rcvmsg_update_ctx (rmsg, cmsg->ctx);
   } else if (type == CK_MSG_LOC) {
     LocMsg *lmsg = (LocMsg *) &msg;
-    rcvmsg_update_loc (rmsg, lmsg->file, lmsg->line);
+    if (rmsg->failctx == -1)
+    {
+      rcvmsg_update_loc (rmsg, lmsg->file, lmsg->line);
+    }
     free (lmsg->file);
   } else if (type == CK_MSG_FAIL) {      
     FailMsg *fmsg = (FailMsg *) &msg;
-    rmsg->msg = emalloc (strlen (fmsg->msg) + 1);
-    strcpy (rmsg->msg, fmsg->msg);
+    if (rmsg->msg == NULL)
+    {
+      rmsg->msg = emalloc (strlen (fmsg->msg) + 1);
+      strcpy (rmsg->msg, fmsg->msg);
+      rmsg->failctx = rmsg->lastctx;
+    }
+    else
+    {
+      /* Skip subsequent failure messages, only happens for CK_NOFORK */
+    }
     free (fmsg->msg);
   } else
     check_type (type, __FILE__, __LINE__);
@@ -337,6 +348,7 @@ static RcvMsg *rcvmsg_create (void)
 
   rmsg = emalloc (sizeof (RcvMsg));
   rmsg->lastctx = -1;
+  rmsg->failctx = -1;
   rmsg->msg = NULL;
   reset_rcv_test (rmsg);
   reset_rcv_fixture (rmsg);
@@ -345,17 +357,19 @@ static RcvMsg *rcvmsg_create (void)
 
 void rcvmsg_free (RcvMsg *rmsg)
 {
-  if (rmsg->fixture_file!=NULL) free(rmsg->fixture_file);
-  if (rmsg->test_file!=NULL) free(rmsg->test_file);
-  if (rmsg->msg!=NULL) free(rmsg->msg);
+  free(rmsg->fixture_file);
+  free(rmsg->test_file);
+  free(rmsg->msg);
   free(rmsg);
 }
 
 static void rcvmsg_update_ctx (RcvMsg *rmsg, enum ck_result_ctx ctx)
 {
   if (rmsg->lastctx != -1)
+  {
+    free(rmsg->fixture_file);
     reset_rcv_fixture (rmsg);
-
+  }
   rmsg->lastctx = ctx;
 }
 
@@ -364,12 +378,12 @@ static void rcvmsg_update_loc (RcvMsg *rmsg, const char *file, int line)
   int flen = strlen(file);
   
   if (rmsg->lastctx == CK_CTX_TEST) {
-    if (rmsg->test_file!=NULL) free(rmsg->test_file);
+    free(rmsg->test_file);
     rmsg->test_line = line;
     rmsg->test_file = emalloc (flen + 1);
     strcpy (rmsg->test_file, file);
   } else {
-    if (rmsg->fixture_file!=NULL) free(rmsg->fixture_file);
+    free(rmsg->fixture_file);
     rmsg->fixture_line = line;
     rmsg->fixture_file = emalloc (flen + 1);
     strcpy (rmsg->fixture_file, file);
index 3765216f50f95ed9041084c0db19de0211f67794..0b78695a955fa6acb7f262fee787f4f98e21e59e 100644 (file)
@@ -55,6 +55,7 @@ typedef union
 typedef struct RcvMsg
 {
   enum ck_result_ctx lastctx;
+  enum ck_result_ctx failctx;
   char *fixture_file;
   int fixture_line;
   char *test_file;