bool tmon_set_errno(struct tmon_pkt *pkt, int err)
{
- if (err < 0 && err > UINT16_MAX) {
+ if (err <= 0 || err > UINT16_MAX) {
return false;
}
epipe=$(errcode EPIPE)
etimedout=$(errcode ETIMEDOUT)
+edom=$(errcode EDOM)
test_cases()
{
EOF
unit_test tmon_test "7" false 0 false
+ test_case "errno 110 packet @ 1s, no timeout"
+ ok <<EOF
+READER ERR=110
+WRITER OK
+EOF
+ unit_test tmon_test "#110" false 0 false
+
+ test_case "errno 0 error causes EDOM @ 1s, no timeout"
+ ok <<EOF
+WRITER ERR=$edom
+READER ERR=$epipe
+EOF
+ unit_test tmon_test "#0;" false 0 false
+
+ test_case "errno -1 error causes EDOM @ 1s, no timeout"
+ ok <<EOF
+WRITER ERR=$edom
+READER ERR=$epipe
+EOF
+ unit_test tmon_test "#-1;" false 0 false
+
+ test_case "errno 70000 error causes EDOM @ 1s, no timeout"
+ ok <<EOF
+WRITER ERR=$edom
+READER ERR=$epipe
+EOF
+ unit_test tmon_test "#70000;!0" false 0 false
+
test_case "Exit packet @ 3s, no timeout"
ok <<EOF
READER OK
private_data, struct test_write_state);
bool status;
size_t len;
+ char *end;
int err;
char c;
const char *t;
case '!':
status = tmon_set_ping(pkt);
break;
+ case '#':
+ /* Additional errno syntax: #nnn[;] */
+ t = &state->write_data[state->offset];
+ err = (int)strtol(t, &end, 10);
+ state->offset += (end - t);
+ if (state->write_data[state->offset] == ';') {
+ state->offset++;
+ }
+ status = tmon_set_errno(pkt, err);
+ break;
default:
status = false;
}