From ce25d82aa76a3371bd25ff5505c350dca77fca3b Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Mon, 25 Oct 2004 00:18:06 +0000 Subject: [PATCH] Make sure close() is not called on a fd < 1 with a wrapper call (bug #2710) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@4091 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- channels/chan_zap.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/channels/chan_zap.c b/channels/chan_zap.c index b03b51b1c9..77416d1357 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -153,6 +153,8 @@ static char *config = "zapata.conf"; #define DCHAN_AVAILABLE (DCHAN_PROVISIONED | DCHAN_NOTINALARM | DCHAN_UP) +#define zt_close(fd) if(fd > 0) close(fd); + static char context[AST_MAX_EXTENSION] = "default"; static char callerid[256] = ""; @@ -758,7 +760,7 @@ static int zt_open(char *fn) if (chan) { if (ioctl(fd, ZT_SPECIFY, &chan)) { x = errno; - close(fd); + zt_close(fd); errno = x; ast_log(LOG_WARNING, "Unable to specify channel %d: %s\n", chan, strerror(errno)); return -1; @@ -769,11 +771,6 @@ static int zt_open(char *fn) return fd; } -static void zt_close(int fd) -{ - close(fd); -} - int zt_setlinear(int zfd, int linear) { int res; @@ -6080,7 +6077,7 @@ static int pri_create_trunkgroup(int trunkgroup, int *channels) x = channels[y]; if (ioctl(fd, ZT_SPECIFY, &x)) { ast_log(LOG_WARNING, "Failed to specify channel %d: %s\n", channels[y], strerror(errno)); - close(fd); + zt_close(fd); return -1; } if (ioctl(fd, ZT_GET_PARAMS, &p)) { @@ -6089,18 +6086,18 @@ static int pri_create_trunkgroup(int trunkgroup, int *channels) } if (ioctl(fd, ZT_SPANSTAT, &si)) { ast_log(LOG_WARNING, "Failed go get span information on channel %d (span %d)\n", channels[y], p.spanno); - close(fd); + zt_close(fd); return -1; } span = p.spanno - 1; if (pris[span].trunkgroup) { ast_log(LOG_WARNING, "Span %d is already provisioned for trunk group %d\n", span + 1, pris[span].trunkgroup); - close(fd); + zt_close(fd); return -1; } if (pris[span].pvts[0]) { ast_log(LOG_WARNING, "Span %d is already provisioned with channels (implicit PRI maybe?)\n", span + 1); - close(fd); + zt_close(fd); return -1; } if (!y) { @@ -6111,7 +6108,7 @@ static int pri_create_trunkgroup(int trunkgroup, int *channels) pris[ospan].dchannels[y] = channels[y]; pris[ospan].dchanavail[y] |= DCHAN_PROVISIONED; pris[span].span = span + 1; - close(fd); + zt_close(fd); } return 0; } @@ -7055,7 +7052,7 @@ static int pri_fixup_principle(struct zt_pri *pri, int principle, q931_call *c) else { /* Looks good. Drop the pseudo channel now, clear up the assignment, and wakeup the potential sleeper */ - close(crv->subs[SUB_REAL].zfd); + zt_close(crv->subs[SUB_REAL].zfd); pri->pvts[principle]->call = crv->call; pri_assign_bearer(crv, pri, pri->pvts[principle]); ast_log(LOG_DEBUG, "Assigning bearer %d/%d to CRV %d:%d\n", @@ -8057,13 +8054,13 @@ static int start_pri(struct zt_pri *pri) } res = ioctl(pri->fds[i], ZT_GET_PARAMS, &p); if (res) { - close(pri->fds[i]); + zt_close(pri->fds[i]); pri->fds[i] = -1; ast_log(LOG_ERROR, "Unable to get parameters for D-channel %d (%s)\n", x, strerror(errno)); return -1; } if (p.sigtype != ZT_SIG_HDLCFCS) { - close(pri->fds[i]); + zt_close(pri->fds[i]); pri->fds[i] = -1; ast_log(LOG_ERROR, "D-channel %d is not in HDLC/FCS mode. See /etc/zaptel.conf\n", x); return -1; @@ -8071,7 +8068,7 @@ static int start_pri(struct zt_pri *pri) memset(&si, 0, sizeof(si)); res = ioctl(pri->fds[i], ZT_SPANSTAT, &si); if (res) { - close(pri->fds[i]); + zt_close(pri->fds[i]); pri->fds[i] = -1; ast_log(LOG_ERROR, "Unable to get span state for D-channel %d (%s)\n", x, strerror(errno)); } @@ -8085,7 +8082,7 @@ static int start_pri(struct zt_pri *pri) bi.bufsize = 1024; if (ioctl(pri->fds[i], ZT_SET_BUFINFO, &bi)) { ast_log(LOG_ERROR, "Unable to set appropriate buffering on channel %d\n", x); - close(pri->fds[i]); + zt_close(pri->fds[i]); pri->fds[i] = -1; return -1; } @@ -8098,7 +8095,7 @@ static int start_pri(struct zt_pri *pri) if (i) pri_enslave(pri->dchans[0], pri->dchans[i]); if (!pri->dchans[i]) { - close(pri->fds[i]); + zt_close(pri->fds[i]); pri->fds[i] = -1; ast_log(LOG_ERROR, "Unable to create PRI structure\n"); return -1; @@ -8113,7 +8110,7 @@ static int start_pri(struct zt_pri *pri) for (i=0;idchannels[i]) break; - close(pri->fds[i]); + zt_close(pri->fds[i]); pri->fds[i] = -1; } ast_log(LOG_ERROR, "Unable to spawn D-channel: %s\n", strerror(errno)); -- 2.47.2