diff --git a/CMakeLists.txt b/CMakeLists.txt
index 926ba0b7..6e43d8fb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -94,7 +94,7 @@ add_executable(elogd
${CMAKE_SOURCE_DIR}/src/elogd.cxx
${CMAKE_SOURCE_DIR}/src/auth.cxx
${CMAKE_SOURCE_DIR}/mxml/mxml.cxx
- ${CMAKE_SOURCE_DIR}/mxml/strlcpy.cxx
+ ${CMAKE_SOURCE_DIR}/src/strlcpy.cxx
${CMAKE_SOURCE_DIR}/src/crypt.cxx
)
@@ -107,7 +107,7 @@ endif()
add_executable(elog
${CMAKE_SOURCE_DIR}/src/elog.cxx
${CMAKE_SOURCE_DIR}/src/crypt.cxx
- ${CMAKE_SOURCE_DIR}/mxml/strlcpy.cxx
+ ${CMAKE_SOURCE_DIR}/src/strlcpy.cxx
)
add_dependencies(elogd git_revision_h)
diff --git a/src/strlcpy.cxx b/src/strlcpy.cxx
new file mode 100644
index 00000000..586c2bc9
--- /dev/null
+++ b/src/strlcpy.cxx
@@ -0,0 +1,101 @@
+/********************************************************************\
+
+ Name: strlcpy.c
+ Created by: Stefan Ritt
+ Copyright 2000 + Stefan Ritt
+
+ Contents: Contains strlcpy and strlcat which are versions of
+ strcpy and strcat, but which avoid buffer overflows
+
+
+ This file is part of MIDAS XML Library.
+
+ MIDAS XML Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ MIDAS XML Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with MIDAS XML Library. If not, see .
+
+\********************************************************************/
+
+#include
+#include
+#include "strlcpy.h"
+
+/*
+* Copy src to string dst of size siz. At most siz-1 characters
+* will be copied. Always NUL terminates (unless size == 0).
+* Returns strlen(src); if retval >= siz, truncation occurred.
+*/
+#ifndef STRLCPY_DEFINED
+
+size_t strlcpy(char *dst, const char *src, size_t size)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = size;
+
+ /* Copy as many bytes as will fit */
+ if (n != 0 && --n != 0) {
+ do {
+ if ((*d++ = *s++) == 0)
+ break;
+ } while (--n != 0);
+ }
+
+ /* Not enough room in dst, add NUL and traverse rest of src */
+ if (n == 0) {
+ if (size != 0)
+ *d = '\0'; /* NUL-terminate dst */
+ while (*s++);
+ }
+
+ return (s - src - 1); /* count does not include NUL */
+}
+
+/*-------------------------------------------------------------------*/
+
+/*
+* Appends src to string dst of size siz (unlike strncat, siz is the
+* full size of dst, not space left). At most siz-1 characters
+* will be copied. Always NUL terminates (unless size <= strlen(dst)).
+* Returns strlen(src) + MIN(size, strlen(initial dst)).
+* If retval >= size, truncation occurred.
+*/
+size_t strlcat(char *dst, const char *src, size_t size)
+{
+ char *d = dst;
+ const char *s = src;
+ size_t n = size;
+ size_t dlen;
+
+ /* Find the end of dst and adjust bytes left but don't go past end */
+ while (n-- != 0 && *d != '\0')
+ d++;
+ dlen = d - dst;
+ n = size - dlen;
+
+ if (n == 0)
+ return (dlen + strlen(s));
+ while (*s != '\0') {
+ if (n != 1) {
+ *d++ = *s;
+ n--;
+ }
+ s++;
+ }
+ *d = '\0';
+
+ return (dlen + (s - src)); /* count does not include NUL */
+}
+
+/*-------------------------------------------------------------------*/
+
+#endif // STRLCPY_DEFINED
diff --git a/src/strlcpy.h b/src/strlcpy.h
new file mode 100644
index 00000000..589a6442
--- /dev/null
+++ b/src/strlcpy.h
@@ -0,0 +1,55 @@
+/********************************************************************\
+
+ Name: strlcpy.h
+ Created by: Stefan Ritt
+ Copyright 2000 + Stefan Ritt
+
+ Contents: Header file for strlcpy.c
+
+ This file is part of MIDAS XML Library.
+
+ MIDAS XML Library is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ MIDAS XML Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with MIDAS XML Library. If not, see .
+
+\********************************************************************/
+
+#ifndef _STRLCPY_H_
+#define _STRLCPY_H_
+
+// some version of gcc have a built-in strlcpy
+#ifdef strlcpy
+#define STRLCPY_DEFINED
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef EXPRT
+#if defined(EXPORT_DLL)
+#define EXPRT __declspec(dllexport)
+#else
+#define EXPRT
+#endif
+#endif
+
+#ifndef STRLCPY_DEFINED
+size_t EXPRT strlcpy(char *dst, const char *src, size_t size);
+size_t EXPRT strlcat(char *dst, const char *src, size_t size);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_STRLCPY_H_ */