* Constify argv argument to library functions
Without this users of library function that want to pass in const strings need to duplicate them to avoid compiler warnings
+* Avoid multiple implementations of asprintf
+ The locale-independent rrd_asprintf is equivalent to platform-provided snprintf when strings and integers are formatted.
+ There is no user of vasprintf-msvc that is locale-dependent, therefore this implementation can be replaced with rrd_vasprintf.
+
RRDtool 1.8.0 - 2022-03-13
==========================
win32/rrdcgi.rc win32/rrd_config.h \
win32/rrd.sln win32/rrdtool.rc win32/rrdtool.vcxproj win32/rrdupdate.rc \
win32/rrdcgi.vcxproj win32/rrdupdate.vcxproj win32/uac.manifest \
- win32/asprintf.c win32/asprintf.h win32/dirent.h win32/vasprintf-msvc.c
+ win32/dirent.h
CLEANFILES = config.cache
#include "rrd_rpncalc.h"
#include "rrd_client.h"
#include <stdarg.h>
-#ifdef _MSC_VER
-#include "asprintf.h" /* for vasprintf() here */
-#endif
+#include "rrd_snprintf.h" /* for vasprintf() here */
/* allocate memory for string */
char *sprintf_alloc(
{
char *str = NULL;
va_list argp;
-#ifdef HAVE_VASPRINTF
va_start( argp, fmt );
if (vasprintf( &str, fmt, argp ) == -1){
va_end(argp);
rrd_set_error ("vasprintf failed.");
return(NULL);
}
-#else
- int maxlen = 1024 + strlen(fmt);
- str = (char*)malloc(sizeof(char) * (maxlen + 1));
- if (str != NULL) {
- va_start(argp, fmt);
-#ifdef HAVE_VSNPRINTF
- vsnprintf(str, maxlen, fmt, argp);
-#else
- vsprintf(str, fmt, argp);
-#endif
- }
-#endif /* HAVE_VASPRINTF */
va_end(argp);
return str;
}
#ifdef _MSC_VER
#include "win32-glob.h" /* from https://sourceforge.net/projects/sox/ */
#include "dirent.h" /* from https://github.com/tronkko/dirent */
-#include "asprintf.h" /* from http://asprintf.insanecoding.org */
#else
#if defined(__MINGW32__) && !defined(HAVE_GLOB_H) /* MinGW has glob.h, MinGW-w64 not (yet?) */
#include "win32/win32-glob.h" /* from https://sourceforge.net/projects/sox/ */
#ifndef RRD_SNPRINTF_H
#define RRD_SNPRINTF_H
+#include "rrd_config.h"
+
#ifdef __cplusplus
extern "C" {
#endif
int rrd_snprintf(char *, size_t, const char *, ...);
int rrd_vasprintf(char **, const char *, va_list);
+#ifndef HAVE_VASPRINTF
+#define vasprintf rrd_vasprintf
+#endif
int rrd_asprintf(char **, const char *, ...);
+#ifndef HAVE_ASPRINTF
+#define asprintf rrd_asprintf
+#endif
#ifdef __cplusplus
}
$(TOP)/src/rrd_utils.obj \\r
$(TOP)/src/rrd_version.obj \\r
$(TOP)/src/rrd_xport.obj \\r
- $(TOP)/win32/asprintf.obj \\r
- $(TOP)/win32/vasprintf-msvc.obj \\r
$(TOP)/win32/win32-glob.obj\r
# win32comp.obj is not added to RRD_LIB_OBJ_LIST, because definitions are already in rrd_thread_safe_nt.obj\r
\r
$(TOP)/src/rrd_utils.obj \\r
$(TOP)/src/rrd_version.obj \\r
$(TOP)/src/rrd_xport.obj \\r
- $(TOP)/win32/asprintf.obj \\r
- $(TOP)/win32/vasprintf-msvc.obj \\r
$(TOP)/win32/win32-glob.obj\r
# win32comp.obj is not added to RRD_LIB_OBJ_LIST, because definitions are already in rrd_thread_safe_nt.obj\r
\r
+++ /dev/null
-/*
-Copyright (C) 2014 insane coder (http://insanecoding.blogspot.com/, http://asprintf.insanecoding.org/)
-
-Permission to use, copy, modify, and distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#include "asprintf.h"
-
-int asprintf(char **strp, const char *fmt, ...)
-{
- int r;
- va_list ap;
- va_start(ap, fmt);
- r = vasprintf(strp, fmt, ap);
- va_end(ap);
- return(r);
-}
+++ /dev/null
-/*
-Copyright (C) 2014 insane coder (http://insanecoding.blogspot.com/, http://asprintf.insanecoding.org/)
-
-Permission to use, copy, modify, and distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#ifndef INSANE_ASPRINTF_H
-#define INSANE_ASPRINTF_H
-
-#ifndef __cplusplus
-#include <stdarg.h>
-#else
-#include <cstdarg>
-extern "C"
-{
-#endif
-
-#define insane_free(ptr) { free(ptr); ptr = 0; }
-
-int vasprintf(char **strp, const char *fmt, va_list ap);
-int asprintf(char **strp, const char *fmt, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
<ClCompile Include="..\src\rrd_utils.c" />
<ClCompile Include="..\src\rrd_version.c" />
<ClCompile Include="..\src\rrd_xport.c" />
- <ClCompile Include="asprintf.c" />
- <ClCompile Include="vasprintf-msvc.c" />
<ClCompile Include="win32-glob.c" />
</ItemGroup>
<ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
-</Project>
\ No newline at end of file
+</Project>
# endif
#endif
-/* Define to 1 if you have the `asprintf' function. */
-#define HAVE_ASPRINTF 1
-
/* Define to 1 if you have the `chdir' function. */
#define HAVE_CHDIR 1
/* Define to 1 if you have the `uintptr_t' standard type. */
#define HAVE_UINTPTR_T 1
-/* Define to 1 if you have the `vasprintf' function. */
-#define HAVE_VASPRINTF 1
-
/* Define to 1 if you have the `va_copy' function or macro. */
#define HAVE_VA_COPY 1
+++ /dev/null
-/*
-Copyright (C) 2014 insane coder (http://insanecoding.blogspot.com/, http://asprintf.insanecoding.org/)
-
-Permission to use, copy, modify, and distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <limits.h>
-#include "asprintf.h"
-
-int vasprintf(char **strp, const char *fmt, va_list ap)
-{
- int r = -1, size = _vscprintf(fmt, ap);
-
- if ((size >= 0) && (size < INT_MAX))
- {
- *strp = (char *)malloc(size+1); //+1 for null
- if (*strp)
- {
- r = vsnprintf(*strp, size+1, fmt, ap); //+1 for null
- if ((r < 0) || (r > size))
- {
- insane_free(*strp);
- r = -1;
- }
- }
- }
- else { *strp = 0; }
-
- return(r);
-}
\ No newline at end of file