]> granicus.if.org Git - check/commitdiff
no longer violate the const part of 'const char *' in send functions.
authorbrarcher <brarcher@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Sat, 25 Jan 2014 18:18:14 +0000 (18:18 +0000)
committerbrarcher <brarcher@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Sat, 25 Jan 2014 18:18:14 +0000 (18:18 +0000)
FailMsg and LocMsg contain char* fields which are not const. Assigning
the passed const char* to a FailMsg or LocMsg violates the const.
To avoid this, a copy of the data is made using strdup. Yes, the
extra copy is functionally unnecessary, but to honor the const
it must be done.

The alternative is to make the char* fields in FailMsg and LocMsg
const. This will not work, however, as those fields are sometimes
assigned malloc'ed data in the code and free'd. You cannot pass
a const pointer to free without a warning.

git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@1064 64e312b2-a51f-0410-8e61-82d0ca0eb02a

src/check_msg.c

index 318e03b22f341849a2e3ef5bb3b091222fb8aeb7..2a7cb72533e164830d9daa3f831a2dff450bb195 100644 (file)
@@ -83,8 +83,9 @@ static FILE * get_pipe(void)
 void send_failure_info(const char *msg)
 {
   FailMsg fmsg;
-  fmsg.msg = (char *) msg;
+  fmsg.msg = strdup(msg);
   ppack(get_pipe(), CK_MSG_FAIL, (CheckMsg *) &fmsg);
+  free(fmsg.msg);
 }
 
 void send_duration_info(int duration)
@@ -97,9 +98,10 @@ void send_duration_info(int duration)
 void send_loc_info(const char * file, int line)
 {
   LocMsg lmsg;
-  lmsg.file = (char *) file;
+  lmsg.file = strdup(file);
   lmsg.line = line;
   ppack(get_pipe(), CK_MSG_LOC, (CheckMsg *) &lmsg);
+  free(lmsg.file);
 }
 
 void send_ctx_info(enum ck_result_ctx ctx)