wsjtx: try to clean up the setting of struct qso members

The error checking also added to the bloat.  This commit hides the error
check in a macro.

Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
1 files changed, 88 insertions(+), 84 deletions(-)

M hlog/contest/wsjtx.c
M hlog/contest/wsjtx.c +88 -84
@@ 220,6 220,15 @@ static char *terminate_str(char *out, si
 	return out;
 }
 
+#define SET(cond, expr) \
+	do { \
+		if (cond) { \
+			ret = (expr); \
+			if (ret) \
+				goto err; \
+		} \
+	} while (0)
+
 static int log_qso(struct xlua_state *lua, struct message *msg, const void *raw,
 		   size_t rawlen)
 {

          
@@ 244,97 253,90 @@ static int log_qso(struct xlua_state *lu
 	qso->start = msg->t5.timeon;
 	qso->end = msg->t5.timeoff;
 
-	if (msg->t5.comment.len) {
-		ret = qso_set_comment_str(qso,
-					  STR_DUP_LEN(msg->t5.comment.ptr,
-						      msg->t5.comment.len));
+	SET(msg->t5.comment.len,
+	    qso_set_comment_str(qso,
+				STR_DUP_LEN(msg->t5.comment.ptr,
+					    msg->t5.comment.len)));
+
+	/* QSO side - tx */
+	SET(msg->t5.my_call.len,
+	    qso_set_station_call(qso_get_tx_side(qso),
+				 terminate_str(tmp, sizeof(tmp),
+					       msg->t5.my_call.ptr,
+					       msg->t5.my_call.len)));
+	SET(msg->t5.op_call.len,
+	    qso_set_operator_call(qso_get_tx_side(qso),
+				  terminate_str(tmp, sizeof(tmp),
+						msg->t5.op_call.ptr,
+						msg->t5.op_call.len)));
+	SET(msg->t5.tx_freq != 0,
+	    qso_set_freq_val(qso_get_tx_side(qso),
+			     VAL_ALLOC_INT(msg->t5.tx_freq)));
+	SET(msg->t5.my_grid.len,
+	    qso_set_grid(qso_get_tx_side(qso),
+			 terminate_str(tmp, sizeof(tmp),
+				       msg->t5.my_grid.ptr,
+				       msg->t5.my_grid.len)));
+	SET(msg->t5.tx_power.len,
+	    qso_set_power_user(qso_get_tx_side(qso),
+			       terminate_str(tmp, sizeof(tmp),
+					     msg->t5.tx_power.ptr,
+					     msg->t5.tx_power.len)));
+	SET(msg->t5.mode.len,
+	    qso_set_mode(qso_get_tx_side(qso),
+			 terminate_str(tmp, sizeof(tmp),
+				       msg->t5.mode.ptr,
+				       msg->t5.mode.len)));
+	SET(msg->t5.rsts.len,
+	    qso_set_rst(qso_get_tx_side(qso),
+			terminate_str(tmp, sizeof(tmp),
+				      msg->t5.rsts.ptr,
+				      msg->t5.rsts.len)));
+	if (msg->t5.exch_sent.len) {
+		/* stash it in additional data for now */
+		ret = nvl_set_str(qso->additional, "wsjtx-exch-sent",
+				  STR_DUP_LEN(msg->t5.exch_sent.ptr,
+					      msg->t5.exch_sent.len));
 		if (ret)
 			goto err;
 	}
 
-	/* QSO side - tx */
-	ret = qso_set_station_call(qso_get_tx_side(qso),
-				   terminate_str(tmp, sizeof(tmp),
-						 msg->t5.my_call.ptr,
-						 msg->t5.my_call.len));
-	if (ret)
-		goto err;
-	ret = qso_set_operator_call(qso_get_tx_side(qso),
-				    terminate_str(tmp, sizeof(tmp),
-						  msg->t5.op_call.ptr,
-						  msg->t5.op_call.len));
-	if (ret)
-		goto err;
-	ASSERT3U(msg->t5.tx_freq, !=, 0);
-	ret = qso_set_freq_val(qso_get_tx_side(qso),
-			       VAL_ALLOC_INT(msg->t5.tx_freq));
-	if (ret)
-		goto err;
-	ret = qso_set_grid(qso_get_tx_side(qso),
-			   terminate_str(tmp, sizeof(tmp),
-					 msg->t5.my_grid.ptr,
-					 msg->t5.my_grid.len));
-	if (ret)
-		goto err;
-	if (msg->t5.tx_power.len) {
-		ret = qso_set_power_user(qso_get_tx_side(qso),
-					 terminate_str(tmp, sizeof(tmp),
-						       msg->t5.tx_power.ptr,
-						       msg->t5.tx_power.len));
+	/* QSO side - rx */
+	SET(msg->t5.dx_call.len,
+	    qso_set_station_call(qso_get_rx_side(qso),
+				 terminate_str(tmp, sizeof(tmp),
+					       msg->t5.dx_call.ptr,
+					       msg->t5.dx_call.len)));
+	/*
+	 * We don't know the exact rx frequency, it's not part of the packet
+	 * and the template has only the ~3kHz base frequency.
+	 */
+	qso_clear_freq(qso_get_rx_side(qso));
+	SET(msg->t5.dx_grid.len,
+	    qso_set_grid(qso_get_rx_side(qso),
+			 terminate_str(tmp, sizeof(tmp),
+				       msg->t5.dx_grid.ptr,
+				       msg->t5.dx_grid.len)));
+	SET(msg->t5.mode.len,
+	    qso_set_mode_val(qso_get_rx_side(qso),
+			     qso_get_mode_val(qso_get_tx_side(qso))));
+	SET(msg->t5.rstr.len,
+	    qso_set_rst(qso_get_rx_side(qso),
+			terminate_str(tmp, sizeof(tmp),
+				      msg->t5.rstr.ptr,
+				      msg->t5.rstr.len)));
+	SET(msg->t5.name.len,
+	    qso_set_name_str(qso_get_rx_side(qso),
+			     STR_DUP_LEN(msg->t5.name.ptr,
+					 msg->t5.name.len)));
+	if (msg->t5.exch_recv.len) {
+		/* stash it in additional data for now */
+		ret = nvl_set_str(qso->additional, "wsjtx-exch-recv",
+				  STR_DUP_LEN(msg->t5.exch_recv.ptr,
+					      msg->t5.exch_recv.len));
 		if (ret)
 			goto err;
 	}
-	ret = qso_set_mode(qso_get_tx_side(qso),
-			   terminate_str(tmp, sizeof(tmp),
-					 msg->t5.mode.ptr,
-					 msg->t5.mode.len));
-	if (ret)
-		goto err;
-	if (msg->t5.rsts.len) {
-		ret = qso_set_rst(qso_get_tx_side(qso),
-				  terminate_str(tmp, sizeof(tmp),
-						msg->t5.rsts.ptr,
-						msg->t5.rsts.len));
-		if (ret)
-			goto err;
-	}
-	/* TODO: set exchange sent */
-
-	/* QSO side - rx */
-	ret = qso_set_station_call(qso_get_rx_side(qso),
-				   terminate_str(tmp, sizeof(tmp),
-						 msg->t5.dx_call.ptr,
-						 msg->t5.dx_call.len));
-	if (ret)
-		goto err;
-	if (msg->t5.dx_grid.len) {
-		ret = qso_set_grid(qso_get_rx_side(qso),
-				   terminate_str(tmp, sizeof(tmp),
-						 msg->t5.dx_grid.ptr,
-						 msg->t5.dx_grid.len));
-		if (ret)
-			goto err;
-	}
-	ret = qso_set_mode_val(qso_get_rx_side(qso),
-			       qso_get_mode_val(qso_get_tx_side(qso)));
-	if (ret)
-		goto err;
-	if (msg->t5.rstr.len) {
-		ret = qso_set_rst(qso_get_rx_side(qso),
-				  terminate_str(tmp, sizeof(tmp),
-						msg->t5.rstr.ptr,
-						msg->t5.rstr.len));
-		if (ret)
-			goto err;
-	}
-	if (msg->t5.name.len) {
-		ret = qso_set_name_str(qso_get_rx_side(qso),
-				       STR_DUP_LEN(msg->t5.name.ptr,
-						   msg->t5.name.len));
-		if (ret)
-			goto err;
-	}
-	/* TODO: set exchange received */
 
 	/* stash the current time & raw message in an additional field */
 	ret = nvl_set_int(qso->additional, "wsjtx-import-time", gettime());

          
@@ 362,6 364,8 @@ err:
 	return ret;
 }
 
+#undef SET
+
 static void wsjtx_process(const union xsockaddr *addr, size_t addrlen,
 			  void *buf, size_t len, void *arg)
 {