static void tst_brk__(const char *file, const int lineno, int ttype, const char *fname, void (*func)(void), const char *arg_fmt, ...) { pthread_mutex_lock(&tmutex); char tmesg[USERMESG]; int ttype_result = TTYPE_RESULT(ttype); #if DEBUG printf("IN tst_brk__\n"); fflush(stdout); fflush(stdout); #endif EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG); /* * Only FAIL, BROK, CONF, and RETR are supported by tst_brk(). */ if (ttype_result != TFAIL && ttype_result != TBROK && ttype_result != TCONF) { sprintf(Warn_mesg, "%s: Invalid Type: %d. Using TBROK", __func__, ttype_result); tst_print(TCID, 0, TWARN, Warn_mesg); /* Keep TERRNO, TTERRNO, etc. */ ttype = (ttype & ~ttype_result) | TBROK; } tst_res__(file, lineno, ttype, fname, "%s", tmesg); if (tst_brk_entered == 0) { if (ttype_result == TCONF) { tst_res__(file, lineno, ttype, NULL, "Remaining cases not appropriate for " "configuration"); } else if (ttype_result == TBROK) { tst_res__(file, lineno, TBROK, NULL, "Remaining cases broken"); } } /* * If no cleanup function was specified, just return to the caller. * Otherwise call the specified function. */ if (func != NULL) { tst_brk_entered++; (*func) (); tst_brk_entered--; } if (tst_brk_entered == 0) tst_exit(); pthread_mutex_unlock(&tmutex); }
void tst_resm_(const char *file, const int lineno, int ttype, const char *arg_fmt, ...) { char tmesg[USERMESG]; EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG); tst_res__(file, lineno, ttype, "%s", tmesg); }
/* * tst_resm_hexd_() - Interface to tst_res(), with no filename. * Also, dump specified buffer in hex. */ void tst_resm_hexd_(const char *file, const int lineno, int ttype, const void *buf, size_t size, const char *arg_fmt, ...) { pthread_mutex_lock(&tmutex); char tmesg[USERMESG]; #if DEBUG printf("IN tst_resm_hexd_\n"); fflush(stdout); #endif EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG); static const size_t symb_num = 2; /* xx */ static const size_t size_max = 16; size_t offset = strlen(tmesg); char *pmesg = tmesg; if (size > size_max || size == 0 || (offset + size * (symb_num + 1)) >= USERMESG) tst_res__(file, lineno, ttype, NULL, "%s", tmesg); else pmesg += offset; size_t i; for (i = 0; i < size; ++i) { /* add space before byte except first one */ if (pmesg != tmesg) *(pmesg++) = ' '; sprintf(pmesg, "%02x", ((unsigned char *)buf)[i]); pmesg += symb_num; if ((i + 1) % size_max == 0 || i + 1 == size) { tst_res__(file, lineno, ttype, NULL, "%s", tmesg); pmesg = tmesg; } } pthread_mutex_unlock(&tmutex); }
/* * tst_resm_() - Interface to tst_res(), with no filename. */ void tst_resm_(const char *file, const int lineno, int ttype, const char *arg_fmt, ...) { char tmesg[USERMESG]; #if DEBUG printf("IN tst_resm\n"); fflush(stdout); fflush(stdout); #endif EXPAND_VAR_ARGS(tmesg, arg_fmt, USERMESG); tst_res__(file, lineno, ttype, NULL, "%s", tmesg); }