diff options
author | dbailey <dbailey@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-04-20 19:10:56 +0000 |
---|---|---|
committer | dbailey <dbailey@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-04-20 19:10:56 +0000 |
commit | fe4f992c054c2a3adb75730e1c9e6f207d124445 (patch) | |
tree | cd02334e3c040bdcd5f1ec131ff8e15bad2cde45 /main/manager.c | |
parent | 78469be4d05fe0c45252a6ef15b9b01f63346524 (diff) |
Clean up problem with manager implementation of mmap where it was not testing against MAP_FAILED response.
Got rid of shadowed variable used in processign the mmap results.
Change test of mmap results to compare against MAP_FAILED
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@189391 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'main/manager.c')
-rw-r--r-- | main/manager.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/main/manager.c b/main/manager.c index 65b6d8817..d54874547 100644 --- a/main/manager.c +++ b/main/manager.c @@ -2881,30 +2881,32 @@ static char *generic_http_callback(int format, struct sockaddr_in *requestor, co char *buf; size_t l = lseek(ss.fd, 0, SEEK_END); if (l) { - if ((buf = mmap(NULL, l, PROT_READ | PROT_WRITE, MAP_SHARED, ss.fd, 0))) { - char *tmp; + if (MAP_FAILED == (buf = mmap(NULL, l, PROT_READ | PROT_WRITE, MAP_PRIVATE, ss.fd, 0))) { + ast_log(LOG_WARNING, "mmap failed. Manager request output was not processed\n"); + } else { + char *tmpbuf; if (format == FORMAT_XML) - tmp = xml_translate(buf, params); + tmpbuf = xml_translate(buf, params); else if (format == FORMAT_HTML) - tmp = html_translate(buf); + tmpbuf = html_translate(buf); else - tmp = buf; - if (tmp) { + tmpbuf = buf; + if (tmpbuf) { size_t wlen, tlen; - if ((retval = malloc((wlen = strlen(workspace)) + (tlen = strlen(tmp)) + 128))) { + if ((retval = malloc((wlen = strlen(workspace)) + (tlen = strlen(tmpbuf)) + 128))) { strcpy(retval, workspace); - strcpy(retval + wlen, tmp); + strcpy(retval + wlen, tmpbuf); c = retval + wlen + tlen; /* Leftover space for footer, if any */ len = 120; } } - if (tmp != buf) - free(tmp); + if (tmpbuf != buf) + free(tmpbuf); free(s->outputstr); s->outputstr = NULL; + munmap(buf, l); } - munmap(buf, l); } fclose(ss.f); ss.f = NULL; |