diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-08-25 08:26:21 +0000 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2010-08-25 08:26:21 +0000 |
commit | 2b5bd836cedb5aa06c1a372d88d7e3501a66e3f8 (patch) | |
tree | 8496a01234daecd0cd01480dc5ea0eb4345d734a /cpukit/libblock | |
parent | 2010-08-24 Joel Sherrill <joel.sherrilL@OARcorp.com> (diff) | |
download | rtems-2b5bd836cedb5aa06c1a372d88d7e3501a66e3f8.tar.bz2 |
2010-08-25 Sebastian Huber <sebastian.huber@embedded-brains.de>
CID 113/SECURE_CODING
* libblock/src/media-path.c: Avoid strcpy(). Style. Use assert() to
avoid dead code.
Diffstat (limited to 'cpukit/libblock')
-rw-r--r-- | cpukit/libblock/src/media-path.c | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/cpukit/libblock/src/media-path.c b/cpukit/libblock/src/media-path.c index 19da3faa8c..bf9b3d6970 100644 --- a/cpukit/libblock/src/media-path.c +++ b/cpukit/libblock/src/media-path.c @@ -24,22 +24,22 @@ #include <stdlib.h> #include <string.h> #include <inttypes.h> +#include <assert.h> #include <rtems/media.h> -char *rtems_media_create_path(const char *prefix, const char *name, rtems_device_major_number major) +char *rtems_media_create_path( + const char *prefix, + const char *name, + rtems_device_major_number major +) { - size_t const len = strlen(prefix) + 1 + strlen(name) + 1 + 10 + 1; - char *const s = malloc(len); + size_t const size = strlen(prefix) + 1 + strlen(name) + 1 + 10 + 1; + char *const s = malloc(size); if (s != NULL) { - int rv = snprintf(s, len, "%s/%s-%" PRIu32, prefix, name, major); - - if (rv >= (int) len) { - free(s); - - return NULL; - } + int rv = snprintf(s, size, "%s/%s-%" PRIu32, prefix, name, major); + assert(rv < (int) size); } return s; @@ -50,32 +50,30 @@ char *rtems_media_replace_prefix(const char *new_prefix, const char *path) const char *const name_try = strrchr(path, '/'); const char *const name = (name_try == NULL) ? path : name_try + 1; size_t const new_prefix_len = strlen(new_prefix); - size_t const name_len = strlen(name); - size_t const len = new_prefix_len + 1 + name_len + 1; - char *const s = malloc(len); + size_t const name_size = strlen(name) + 1; + size_t const size = new_prefix_len + 1 + name_size; + char *const s = malloc(size); if (s != NULL) { - strcpy(s, new_prefix); - strcpy(s + new_prefix_len, "/"); - strcpy(s + new_prefix_len + 1, name); + memcpy(s, new_prefix, new_prefix_len); + s [new_prefix_len] = '/'; + memcpy(s + new_prefix_len + 1, name, name_size); } return s; } -char *rtems_media_append_minor(const char *path, rtems_device_minor_number minor) +char *rtems_media_append_minor( + const char *path, + rtems_device_minor_number minor +) { - size_t const len = strlen(path) + 1 + 10 + 1; - char *const s = malloc(len); + size_t const size = strlen(path) + 1 + 10 + 1; + char *const s = malloc(size); if (s != NULL) { - int rv = snprintf(s, len, "%s-%" PRIu32, path, minor); - - if (rv >= (int) len) { - free(s); - - return NULL; - } + int rv = snprintf(s, size, "%s-%" PRIu32, path, minor); + assert(rv < (int) size); } return s; |