Skip to content

Commit

Permalink
Removes implementation of my_strdup() from the multi VFD (#527)
Browse files Browse the repository at this point in the history
* Committing clang-format changes

* Removes my_strdup() from the multi VFD

* Use strdup directly when memory sanity checks are off

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
  • Loading branch information
derobins and github-actions[bot] authored Mar 31, 2021
1 parent 0f0721f commit 78fe675
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 47 deletions.
44 changes: 11 additions & 33 deletions src/H5FDmulti.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,15 @@
#define TRUE 1
#endif

/* Windows doesn't like some POSIX names and redefines them with an
* underscore
*/
#ifdef _WIN32
#define my_strdup _strdup
#else
#define my_strdup strdup
#endif

/* Loop through all mapped files */
#define UNIQUE_MEMBERS_CORE(MAP, ITER, SEEN, LOOPVAR) \
{ \
Expand Down Expand Up @@ -103,9 +112,8 @@ typedef struct H5FD_multi_dxpl_t {
} H5FD_multi_dxpl_t;

/* Private functions */
static char *my_strdup(const char *s);
static int compute_next(H5FD_multi_t *file);
static int open_members(H5FD_multi_t *file);
static int compute_next(H5FD_multi_t *file);
static int open_members(H5FD_multi_t *file);

/* Callback prototypes */
static herr_t H5FD_multi_term(void);
Expand Down Expand Up @@ -171,36 +179,6 @@ static const H5FD_class_t H5FD_multi_g = {
H5FD_FLMAP_DEFAULT /*fl_map */
};

/*-------------------------------------------------------------------------
* Function: my_strdup
*
* Purpose: Private version of strdup()
*
* Return: Success: Ptr to new copy of string
*
* Failure: NULL
*
* Programmer: Robb Matzke
* Friday, August 13, 1999
*
*-------------------------------------------------------------------------
*/
static char *
my_strdup(const char *s)
{
char * x;
size_t str_len;

if (!s)
return NULL;
str_len = strlen(s) + 1;
if (NULL == (x = (char *)malloc(str_len)))
return NULL;
memcpy(x, s, str_len);

return x;
}

/*-------------------------------------------------------------------------
* Function: H5FD_multi_init
*
Expand Down
15 changes: 13 additions & 2 deletions src/H5MM.c
Original file line number Diff line number Diff line change
Expand Up @@ -449,11 +449,17 @@ H5MM_xstrdup(const char *s)

FUNC_ENTER_NOAPI(NULL)

#if defined H5_MEMORY_ALLOC_SANITY_CHECK
if (s) {
if (NULL == (ret_value = (char *)H5MM_malloc(HDstrlen(s) + 1)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
HDstrcpy(ret_value, s);
} /* end if */
}
#else
if (s)
if (NULL == (ret_value = HDstrdup(s)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "string duplication failed")
#endif

done:
FUNC_LEAVE_NOAPI(ret_value)
Expand Down Expand Up @@ -483,10 +489,15 @@ H5MM_strdup(const char *s)
FUNC_ENTER_NOAPI(NULL)

if (!s)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "null string")
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "NULL string not allowed")
#if defined H5_MEMORY_ALLOC_SANITY_CHECK
if (NULL == (ret_value = (char *)H5MM_malloc(HDstrlen(s) + 1)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
HDstrcpy(ret_value, s);
#else
if (NULL == (ret_value = HDstrdup(s)))
HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "string duplication failed")
#endif

done:
FUNC_LEAVE_NOAPI(ret_value)
Expand Down
15 changes: 3 additions & 12 deletions src/H5private.h
Original file line number Diff line number Diff line change
Expand Up @@ -1484,6 +1484,9 @@ H5_DLL void HDsrand(unsigned int seed);
#ifndef HDstrcspn
#define HDstrcspn(X, Y) strcspn(X, Y)
#endif /* HDstrcspn */
#ifndef HDstrdup
#define HDstrdup(S) strdup(S)
#endif /* HDstrdup */
#ifndef HDstrerror
#define HDstrerror(N) strerror(N)
#endif /* HDstrerror */
Expand Down Expand Up @@ -1672,18 +1675,6 @@ H5_DLL int HDvasprintf(char **bufp, const char *fmt, va_list _ap);
#define HDwrite(F, M, Z) write(F, M, Z)
#endif /* HDwrite */

/*
* And now for a couple non-Posix functions... Watch out for systems that
* define these in terms of macros.
*/
#if !defined strdup && !defined H5_HAVE_STRDUP
extern char * strdup(const char *s);
#endif

#ifndef HDstrdup
#define HDstrdup(S) strdup(S)
#endif /* HDstrdup */

/* Macro for "stringizing" an integer in the C preprocessor (use H5_TOSTRING) */
/* (use H5_TOSTRING, H5_STRINGIZE is just part of the implementation) */
#define H5_STRINGIZE(x) #x
Expand Down

0 comments on commit 78fe675

Please sign in to comment.