{
int msqid;
- msqid = get_msq();
+ msqid = get_send_msq();
send_last_loc_msg (msqid, file, line);
}
{
int msqid;
- msqid = get_msq();
+ msqid = get_send_msq();
send_last_loc_msg (msqid, file, line);
}
{
int msqid;
- msqid = get_msq();
+ msqid = get_send_msq();
if (line > MAXLINE)
eprintf ("Line number %d too large to use", line);
};
static LastLocMsg *create_last_loc_msg (char *file, int line);
static FailureMsg *create_failure_msg (char *msg);
-static key_t get_key(void);
+static int get_msq (key_t key);
+static char *ipcerrstr (int ipcerr);
static FailureMsg *create_failure_msg (char *msg)
{
free(rmsg);
}
-static char *ipcerrstr (int ipcerr)
-{
- switch (ipcerr) {
- case EACCES: return "EACCES";
- case EEXIST: return "EEXIST";
- case EIDRM: return "EIDRM";
- case ENOENT: return "ENOENT";
- case ENOMEM: return "ENOMEM";
- case ENOSPC: return "ENOSPC";
- default: return "None";
- }
-}
-
-
int init_msq (void) {
int msqid;
- msqid = msgget(get_key(), 0666 | IPC_CREAT);
+ msqid = msgget(init_key(), 0666 | IPC_CREAT);
if (msqid == -1)
eprintf ("Unable to create message queue (%s):", ipcerrstr(errno));
return msqid;
}
-int get_msq (void)
+int get_recv_msq (void)
+{
+ return get_msq ((key_t) recv_key());
+}
+
+int get_send_msq (void)
+{
+ return get_msq ((key_t) send_key());
+}
+
+
+static int get_msq (key_t key)
{
int msqid;
- msqid = msgget (get_key(), 0666);
+ msqid = msgget (key, 0666);
if (msqid == -1)
- eprintf ("Unable to create message queue (%s):", ipcerrstr(errno));
+ eprintf ("Unable to get message queue (%s):", ipcerrstr(errno));
return msqid;
}
{
int msqid;
- msqid = get_msq();
+ msqid = get_msq((key_t) init_key());
if (msgctl (msqid, IPC_RMID, NULL) == -1)
eprintf ("Failed to free message queue:");
}
return rmsg;
}
-static key_t get_key (void)
+int init_key(void)
+{
+ return getpid();
+}
+
+int send_key(void)
+{
+ return getppid();
+}
+
+int recv_key(void)
+{
+ return getpid();
+}
+
+static char *ipcerrstr (int ipcerrno)
{
- if (is_child())
- return (key_t) getppid();
- else
- return (key_t) getpid();
+ /* Debian sid has broken error reporting for IPC */
+ switch (errno) {
+ case EACCES: return "EACCES";
+ case EEXIST: return "EEXIST";
+ case EIDRM: return "EIDRM";
+ case ENOENT: return "ENOENT";
+ case ENOMEM: return "ENOMEM";
+ case ENOSPC: return "ENOSPC";
+ default: return "Other";
+ }
}
+
+
char msg[CMAXMSG];
} FailureMsg;
-int init_msq (void);
-int get_msq (void);
-void delete_msq (void);
void send_failure_msg (int msqid, char *msg);
void send_last_loc_msg (int msqid, char * file, int line);
char *last_loc_file(LastLocMsg *msg);
int last_loc_line(LastLocMsg *msg);
+int init_msq (void);
+void delete_msq (void);
+
+int get_recv_msq (void);
+int get_send_msq (void);
+int init_key (void);
+int send_key (void);
+int recv_key (void);
+
#endif /*CHECK_MSG_H */
#include "check_run.h"
+static void srunner_run_init (SRunner *sr, enum print_verbosity print_mode);
+static void srunner_run_end (SRunner *sr, enum print_verbosity print_mode);
+static void srunner_iterate_suites (SRunner *sr,
+ enum print_verbosity print_mode);
static void srunner_run_tcase (SRunner *sr, TCase *tc);
static void srunner_add_failure (SRunner *sr, TestResult *tf);
static TestResult *tfun_run (char *tcname, TF *tf);
static void receive_last_loc_info (int msqid, TestResult *tr);
static void receive_failure_info (int msqid, int status, TestResult *tr);
static List *srunner_resultlst (SRunner *sr);
-int _is_child = 0;
static char *signal_msg (int sig);
static char *exit_msg (int exitstatus);
list_free (sr->resultlst);
free (sr);
-}
+}
+static void srunner_run_init (SRunner *sr, enum print_verbosity print_mode)
+{
+ srunner_init_logging (sr, print_mode);
+ log_srunner_start (sr);
+}
+static void srunner_run_end (SRunner *sr, enum print_verbosity print_mode)
+{
-void srunner_run_all (SRunner *sr, int print_mode)
+ log_srunner_end (sr);
+ srunner_end_logging (sr);
+}
+
+static void srunner_iterate_suites (SRunner *sr,
+ enum print_verbosity print_mode)
+
{
List *slst;
List *tcl;
TCase *tc;
- if (sr == NULL)
- return;
- if (print_mode < 0 || print_mode >= CRLAST)
- eprintf("Bad print_mode argument to srunner_run_all: %d", print_mode);
-
- srunner_init_logging (sr, print_mode);
-
- log_srunner_start (sr);
slst = sr->slst;
srunner_run_tcase (sr, tc);
}
}
+}
- log_srunner_end (sr);
-
- srunner_end_logging (sr);
+void srunner_run_all (SRunner *sr, int print_mode)
+{
+ if (sr == NULL)
+ return;
+ if (print_mode < 0 || print_mode >= CRLAST)
+ eprintf("Bad print_mode argument to srunner_run_all: %d", print_mode);
+
+ srunner_run_init (sr, print_mode);
+ srunner_iterate_suites (sr, print_mode);
+ srunner_run_end (sr, print_mode);
}
static void srunner_add_failure (SRunner *sr, TestResult *tr)
{
TestResult *tr = emalloc (sizeof(TestResult));
- msqid = get_msq();
+ msqid = get_recv_msq();
tr->tcname = tcname;
receive_last_loc_info (msqid, tr);
receive_failure_info (msqid, status, tr);
int status = 0;
int msqid;
- msqid = get_msq();
+ msqid = get_recv_msq();
pid = fork();
if (pid == -1)
eprintf ("Unable to fork:");
if (pid == 0) {
- _is_child = 1;
tfun->fn();
_exit(EXIT_SUCCESS);
}
{
return val == CRFAILURE || val == CRERROR;
}
-
-int is_child (void)
-{
- return _is_child;
-}