summaryrefslogtreecommitdiff
path: root/zhm/zhm.c
diff options
context:
space:
mode:
authorGravatar Richard Basch <probe@mit.edu>1993-10-16 17:51:44 +0000
committerGravatar Richard Basch <probe@mit.edu>1993-10-16 17:51:44 +0000
commit3a1ac0632620bf8170890bbdfcd22cc53627b7ba (patch)
tree621bffd1e0ec7209586498cdd2cabfe8e5829584 /zhm/zhm.c
parent5ba5e3379dc21d1d53622902114fc9d5e3accdec (diff)
Under AIX, allow for full dumps if a SEGV signal is received.
Fixed some uninitialized data and freeing of unallocated memory.
Diffstat (limited to 'zhm/zhm.c')
-rw-r--r--zhm/zhm.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/zhm/zhm.c b/zhm/zhm.c
index 5abcfd8..25b93e1 100644
--- a/zhm/zhm.c
+++ b/zhm/zhm.c
@@ -44,7 +44,7 @@ long starttime;
u_short cli_port;
struct sockaddr_in cli_sin, serv_sin, from;
int numserv;
-char **serv_list;
+char **serv_list = (char **)0;
char prim_serv[MAXHOSTNAMELEN], cur_serv[MAXHOSTNAMELEN];
char *zcluster;
int sig_type;
@@ -59,7 +59,7 @@ extern long time();
void choose_server(), init_hm(), detach(),
handle_timeout(), resend_notices(), die_gracefully();
-#if defined(ultrix) || defined(_POSIX_SOURCE)
+#ifdef POSIX
void
#endif
set_sig_type(sig)
@@ -80,6 +80,15 @@ char *argv[];
extern int optind;
register int i, j = 0;
+#ifdef _AIX
+ struct sigaction sa;
+
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_FULLDUMP;
+ sa.sa_handler = SIG_DFL;
+ sigaction(SIGSEGV, &sa, (struct sigaction *)0);
+#endif
+
if (gethostname(hostname, MAXHOSTNAMELEN) < 0) {
printf("Can't find my hostname?!\n");
exit(-1);
@@ -246,7 +255,8 @@ void choose_server()
i = 1;
while (i < numserv)
(void) free(serv_list[i]);
- (void) free(serv_list);
+ if (serv_list)
+ (void) free(serv_list);
numserv = 0;
prim_serv[0] = '\0';