mirror of
				https://github.com/gnif/LookingGlass.git
				synced 2025-11-03 22:22:08 +00:00 
			
		
		
		
	[common] all: implement strdup directly
				
					
				
			Dr.Memory on Windows complains bitterly about invalid heap free as it doesn't seem to be able to track this function's allocations. As it's such a trivial function we can just implement it locally.
This commit is contained in:
		@@ -34,4 +34,7 @@ int alloc_sprintf(char ** str, const char * format, ...)
 | 
			
		||||
// Find value in a list separated by delimiter.
 | 
			
		||||
bool str_containsValue(const char * list, char delimiter, const char * value);
 | 
			
		||||
 | 
			
		||||
// Local implementation of strdup
 | 
			
		||||
char * strdup(const char *s);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,7 @@
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <stdarg.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
 | 
			
		||||
#include "common/stringutils.h"
 | 
			
		||||
 | 
			
		||||
@@ -89,3 +90,23 @@ bool str_containsValue(const char * list, char delimiter, const char * value)
 | 
			
		||||
  }
 | 
			
		||||
  return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char * strdup(const char *s)
 | 
			
		||||
{
 | 
			
		||||
  if (!s)
 | 
			
		||||
  {
 | 
			
		||||
    errno = EINVAL;
 | 
			
		||||
    return NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  const ssize_t len = strlen(s) + 1;
 | 
			
		||||
  char * out = malloc(len);
 | 
			
		||||
  if (!out)
 | 
			
		||||
  {
 | 
			
		||||
    errno = ENOMEM;
 | 
			
		||||
    return NULL;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  memcpy(out, s, len);
 | 
			
		||||
  return out;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user