diff options
author | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-10-09 14:56:51 +0000 |
---|---|---|
committer | murf <murf@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-10-09 14:56:51 +0000 |
commit | f0d32fcc57029c07755a1616c1948c1ed9433495 (patch) | |
tree | dbc9ae3a6c64f0fdeb58465fce49d4fc6fae7fe0 | |
parent | ecde53ad3cfed686b0174bfa65574fd452f6e54c (diff) |
Merged revisions 147807 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
........
r147807 | murf | 2008-10-09 08:17:33 -0600 (Thu, 09 Oct 2008) | 15 lines
(closes issue #13557)
Reported by: nickpeirson
Patches:
pbx.c.patch uploaded by nickpeirson (license 579)
replace_bzero+bcopy.patch uploaded by nickpeirson (license 579)
Tested by: nickpeirson, murf
1. replaced all refs to bzero and bcopy to memset and memmove instead.
2. added a note to the CODING-GUIDELINES
3. add two macros to asterisk.h to prevent bzero, bcopy from creeping
back into the source
4. removed bzero from configure, configure.ac, autoconfig.h.in
........
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@147809 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_iax2.c | 4 | ||||
-rw-r--r-- | channels/chan_oss.c | 2 | ||||
-rw-r--r-- | channels/console_gui.c | 6 | ||||
-rw-r--r-- | channels/console_video.c | 4 | ||||
-rw-r--r-- | channels/vcodecs.c | 14 | ||||
-rwxr-xr-x | configure | 3 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | doc/CODING-GUIDELINES | 6 | ||||
-rw-r--r-- | include/asterisk.h | 3 | ||||
-rw-r--r-- | include/asterisk/autoconfig.h.in | 3 | ||||
-rw-r--r-- | main/astobj2.c | 2 | ||||
-rw-r--r-- | main/cli.c | 4 | ||||
-rw-r--r-- | main/config.c | 2 | ||||
-rw-r--r-- | main/pbx.c | 2 | ||||
-rw-r--r-- | main/rtp.c | 4 | ||||
-rw-r--r-- | main/translate.c | 2 | ||||
-rw-r--r-- | utils/extconf.c | 2 |
17 files changed, 35 insertions, 30 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 0c6fa73ee..aea0c5b7a 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -6483,7 +6483,7 @@ static int try_transfer(struct chan_iax2_pvt *pvt, struct iax_ies *ies) memset(&ied, 0, sizeof(ied)); if (ies->apparent_addr) - bcopy(ies->apparent_addr, &new, sizeof(new)); + memmove(&new, ies->apparent_addr, sizeof(new)); if (ies->callno) newcall = ies->callno; if (!newcall || !new.sin_addr.s_addr || !new.sin_port) { @@ -6619,7 +6619,7 @@ static int iax2_ack_registry(struct iax_ies *ies, struct sockaddr_in *sin, int c memset(&us, 0, sizeof(us)); if (ies->apparent_addr) - bcopy(ies->apparent_addr, &us, sizeof(us)); + memmove(&us, ies->apparent_addr, sizeof(us)); if (ies->username) ast_copy_string(peer, ies->username, sizeof(peer)); if (ies->refresh) diff --git a/channels/chan_oss.c b/channels/chan_oss.c index 9cfd6449e..796a8f4a0 100644 --- a/channels/chan_oss.c +++ b/channels/chan_oss.c @@ -701,7 +701,7 @@ static struct ast_frame *oss_read(struct ast_channel *c) /* XXX can be simplified returning &ast_null_frame */ /* prepare a NULL frame in case we don't have enough data to return */ - bzero(f, sizeof(struct ast_frame)); + memset(f, '\0', sizeof(struct ast_frame)); f->frametype = AST_FRAME_NULL; f->src = oss_tech.type; diff --git a/channels/console_gui.c b/channels/console_gui.c index 73791883c..0fb32d5a2 100644 --- a/channels/console_gui.c +++ b/channels/console_gui.c @@ -135,7 +135,7 @@ static struct gui_info *cleanup_sdl(struct gui_info *gui) if (gui->win[i].bmp) SDL_FreeYUVOverlay(gui->win[i].bmp); } - bzero(gui, sizeof(gui)); + memset(gui, '\0', sizeof(gui)); ast_free(gui); SDL_Quit(); return NULL; @@ -182,7 +182,7 @@ static void show_frame(struct video_desc *env, int out) bmp = gui->win[out].bmp; SDL_LockYUVOverlay(bmp); /* output picture info - this is sdl, YUV420P */ - bzero(&p_out, sizeof(p_out)); + memset(&p_out, '\0', sizeof(p_out)); p_out.data[0] = bmp->pixels[0]; p_out.data[1] = bmp->pixels[1]; p_out.data[2] = bmp->pixels[2]; @@ -943,7 +943,7 @@ static int keypad_cfg_read(struct gui_info *gui, const char *val) return 0; s1[0] = s2[0] = '\0'; - bzero(&e, sizeof(e)); + memset(&e, '\0', sizeof(e)); i = sscanf(val, "%14s %14s %d %d %d %d %d", s1, s2, &e.x0, &e.y0, &e.x1, &e.y1, &e.h); diff --git a/channels/console_video.c b/channels/console_video.c index 554d03c39..b5566638d 100644 --- a/channels/console_video.c +++ b/channels/console_video.c @@ -231,7 +231,7 @@ void fbuf_free(struct fbuf_t *b) if (b->data && b->size) ast_free(b->data); - bzero(b, sizeof(*b)); + memset(b, '\0', sizeof(*b)); /* restore some fields */ b->w = x.w; b->h = x.h; @@ -472,7 +472,7 @@ static AVPicture *fill_pict(struct fbuf_t *b, AVPicture *p) int len = b->w; /* Y linesize, bytes */ int luv = b->w/2; /* U/V linesize, bytes */ - bzero(p, sizeof(*p)); + memset(p, '\0', sizeof(*p)); switch (b->pix_fmt) { case PIX_FMT_RGB555: case PIX_FMT_RGB565: diff --git a/channels/vcodecs.c b/channels/vcodecs.c index ae3770920..f48171f05 100644 --- a/channels/vcodecs.c +++ b/channels/vcodecs.c @@ -204,7 +204,7 @@ void dump_buf(struct fbuf_t *b) if ( x == 0) { /* new line */ if (i != 0) ast_log(LOG_WARNING, "%s\n", buf); - bzero(buf, sizeof(buf)); + memset(buf, '\0', sizeof(buf)); sprintf(buf, "%04x: ", i); } sprintf(buf + 6 + x*3, "%02x ", b->data[i]); @@ -504,7 +504,7 @@ static int ffmpeg_decode(struct video_dec_desc *v, struct fbuf_t *b) } } if (srclen != 0) /* update b with leftover data */ - bcopy(src, b->data, srclen); + memmove(b->data, src, srclen); b->used = srclen; b->ebit = 0; return full_frame; @@ -582,7 +582,7 @@ static struct ast_frame *h263_encap(struct fbuf_t *b, int mtu, if (len < H263_MIN_LEN) /* unreasonably small */ return NULL; - bzero(h263_hdr, sizeof(h263_hdr)); + memset(h263_hdr, '\0', sizeof(h263_hdr)); /* Now set the header bytes. Only type A by now, * and h[0] = h[2] = h[3] = 0 by default. * PTYPE starts 30 bits in the picture, so the first useful @@ -647,7 +647,7 @@ static struct ast_frame *h263_encap(struct fbuf_t *b, int mtu, if (!f) break; - bcopy(h, f->data, 4); /* copy the h263 header */ + memmove(f->data.ptr, h, 4); /* copy the h263 header */ /* XXX to do: if not aligned, fix sbit and ebit, * then move i back by 1 for the next frame */ @@ -737,7 +737,7 @@ static struct ast_frame *h261_encap(struct fbuf_t *b, int mtu, if (len < H261_MIN_LEN) /* unreasonably small */ return NULL; - bzero(h261_hdr, sizeof(h261_hdr)); + memset(h261_hdr, '\0', sizeof(h261_hdr)); /* Similar to the code in h263_encap, but the marker there is longer. * Start a few bytes within the bitstream to avoid hitting the marker @@ -801,7 +801,7 @@ static struct ast_frame *h261_encap(struct fbuf_t *b, int mtu, break; /* recompute header with I=0, V=1 */ h[0] = ( (sbit & 7) << 5 ) | ( (ebit & 7) << 2 ) | 1; - bcopy(h, f->data, 4); /* copy the h261 header */ + memmove(f->data.ptr, h, 4); /* copy the h261 header */ if (ebit) /* not aligned, restart from previous byte */ i--; sbit = (8 - ebit) & 7; @@ -902,7 +902,7 @@ static int mpeg4_decode(struct video_dec_desc *v, struct fbuf_t *b) } datalen -= ret; if (datalen > 0) /* update b with leftover bytes */ - bcopy(b->data + ret, b->data, datalen); + memmove(b->data, b->data + ret, datalen); b->used = datalen; b->ebit = 0; return full_frame; @@ -15179,8 +15179,7 @@ done - -for ac_func in asprintf atexit bzero dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf +for ac_func in asprintf atexit dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` { echo "$as_me:$LINENO: checking for $ac_func" >&5 diff --git a/configure.ac b/configure.ac index 64ee7fed2..61fdc08f0 100644 --- a/configure.ac +++ b/configure.ac @@ -311,7 +311,7 @@ AC_FUNC_STRNLEN AC_FUNC_STRTOD AC_FUNC_UTIME_NULL AC_FUNC_VPRINTF -AC_CHECK_FUNCS([asprintf atexit bzero dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf]) +AC_CHECK_FUNCS([asprintf atexit dup2 endpwent ftruncate getcwd gethostbyname gethostname getloadavg gettimeofday inet_ntoa isascii localtime_r memchr memmove memset mkdir munmap putenv re_comp regcomp select setenv socket strcasecmp strcasestr strchr strcspn strdup strerror strlcat strlcpy strncasecmp strndup strnlen strrchr strsep strspn strstr strtol strtoq unsetenv utime vasprintf]) AC_CHECK_FUNCS([glob]) diff --git a/doc/CODING-GUIDELINES b/doc/CODING-GUIDELINES index af6b506ca..3050a507c 100644 --- a/doc/CODING-GUIDELINES +++ b/doc/CODING-GUIDELINES @@ -373,6 +373,12 @@ processor operations, unlike ast_copy_string(). * Use of functions ------------------ +For the sake of uclibc, do not use index, bcopy or bzero; use +strchr(), memset(), and memmove() instead. uclibc can be configured +to supply these functions, but we can save these users +time and consternation if we abstain from using these +functions. + When making applications, always ast_strdupa(data) to a local pointer if you intend to parse the incoming data string. diff --git a/include/asterisk.h b/include/asterisk.h index f55d5bb0d..7ae81136b 100644 --- a/include/asterisk.h +++ b/include/asterisk.h @@ -178,4 +178,7 @@ struct ast_module; struct ast_variable; struct ast_str; +#define bzero 0x__dont_use_bzero__use_memset_instead"" +#define bcopy 0x__dont_use_bcopy__use_memmove_instead() + #endif /* _ASTERISK_H */ diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index a79f77321..75dd7ba6d 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -119,9 +119,6 @@ /* Define to 1 if byteswap.h macros are available. */ #undef HAVE_BYTESWAP_H -/* Define to 1 if you have the `bzero' function. */ -#undef HAVE_BZERO - /* Define this to indicate the ${CAP_DESCRIP} library */ #undef HAVE_CAP diff --git a/main/astobj2.c b/main/astobj2.c index dd48ae924..87dfd0385 100644 --- a/main/astobj2.c +++ b/main/astobj2.c @@ -194,7 +194,7 @@ int ao2_ref(void *user_data, const int delta) /* for safety, zero-out the astobj2 header and also the * first word of the user-data, which we make sure is always * allocated. */ - bzero(obj, sizeof(struct astobj2 *) + sizeof(void *) ); + memset(obj, '\0', sizeof(struct astobj2 *) + sizeof(void *) ); free(obj); } diff --git a/main/cli.c b/main/cli.c index b5ff643dd..6b129bc84 100644 --- a/main/cli.c +++ b/main/cli.c @@ -1426,7 +1426,7 @@ static int __ast_cli_unregister(struct ast_cli_entry *e, struct ast_cli_entry *e e->_full_cmd = NULL; if (e->handler) { /* this is a new-style entry. Reset fields and free memory. */ - bzero((char **)(e->cmda), sizeof(e->cmda)); + memset((char **)(e->cmda), '\0', sizeof(e->cmda)); ast_free(e->command); e->command = NULL; e->usage = NULL; @@ -1444,7 +1444,7 @@ static int __ast_cli_register(struct ast_cli_entry *e, struct ast_cli_entry *ed) char **dst = (char **)e->cmda; /* need to cast as the entry is readonly */ char *s; - bzero (&a, sizeof(a)); + memset(&a, '\0', sizeof(a)); e->handler(e, CLI_INIT, &a); /* XXX check that usage and command are filled up */ s = ast_skip_blanks(e->command); diff --git a/main/config.c b/main/config.c index ddf660d1a..9c96327b0 100644 --- a/main/config.c +++ b/main/config.c @@ -2269,7 +2269,7 @@ int ast_parse_arg(const char *arg, enum ast_parse_flags flags, struct hostent *hp; struct ast_hostent ahp; - bzero(&_sa_buf, sizeof(_sa_buf)); /* clear buffer */ + memset(&_sa_buf, '\0', sizeof(_sa_buf)); /* clear buffer */ /* duplicate the string to strip away the :port */ port = ast_strdupa(arg); buf = strsep(&port, ":"); diff --git a/main/pbx.c b/main/pbx.c index 70f1f0c50..8739552d4 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -1719,7 +1719,7 @@ static int ext_cmp1(const char **p) return 0x40000; /* XXX make this entry go last... */ } - bzero(chars, sizeof(chars)); /* clear all chars in the set */ + memset(chars, '\0', sizeof(chars)); /* clear all chars in the set */ for (; *p < end ; (*p)++) { unsigned char c1, c2; /* first-last char in range */ c1 = (unsigned char)((*p)[0]); diff --git a/main/rtp.c b/main/rtp.c index 2c891cdf3..46107e33e 100644 --- a/main/rtp.c +++ b/main/rtp.c @@ -625,7 +625,7 @@ int ast_stun_request(int s, struct sockaddr_in *dst, res = ast_select(s + 1, &rfds, NULL, NULL, &to); if (res <= 0) /* timeout or error */ continue; - bzero(&src, sizeof(src)); + memset(&src, '\0', sizeof(src)); srclen = sizeof(src); /* XXX pass -1 in the size, because stun_handle_packet might * write past the end of the buffer. @@ -637,7 +637,7 @@ int ast_stun_request(int s, struct sockaddr_in *dst, retry, res); continue; } - bzero(answer, sizeof(struct sockaddr_in)); + memset(answer, '\0', sizeof(struct sockaddr_in)); stun_handle_packet(s, &src, reply_buf, res, stun_get_mapped, answer); res = 0; /* signal regular exit */ diff --git a/main/translate.c b/main/translate.c index eeeb7cbd1..a38a67024 100644 --- a/main/translate.c +++ b/main/translate.c @@ -451,7 +451,7 @@ static void rebuild_matrix(int samples) ast_debug(1, "Resetting translation matrix\n"); - bzero(tr_matrix, sizeof(tr_matrix)); + memset(tr_matrix, '\0', sizeof(tr_matrix)); /* first, compute all direct costs */ AST_RWLIST_TRAVERSE(&translators, t, list) { diff --git a/utils/extconf.c b/utils/extconf.c index 96be73fe8..6db4f6d8b 100644 --- a/utils/extconf.c +++ b/utils/extconf.c @@ -4406,7 +4406,7 @@ static int ext_cmp1(const char **p) return 0x40000; /* XXX make this entry go last... */ } - bzero(chars, sizeof(chars)); /* clear all chars in the set */ + memset(chars, '\0', sizeof(chars)); /* clear all chars in the set */ for (; *p < end ; (*p)++) { unsigned char c1, c2; /* first-last char in range */ c1 = (unsigned char)((*p)[0]); |