In einigen Libraries fehlen ein paar Funktionen, die dort laut Doku eigentlich vorhanden sein sollten.
Konkrett, auf einem RHEL 2.6.32-504.3.3.el6.x86_64 mit der GCC 4.9.2 waren die memcpy_s(), strcpy_s(), strncpy_s() und einige andere Funktionen nicht in den Bibliotheken enthalten.
Sie können jedoch wie folgt selbst nachgebaut werden:
#include <memory.h> #include <errno.h> typedef error_t errno_t; inline errno_t memcpy_s(void *dest, size_t numberOfElements, const void *src, size_t count) { if (!dest) return EINVAL; memset(dest, 0, sizeof(char)); if (!src) return EINVAL; if (numberOfElements < count) return ERANGE; memcpy(dest, src, count); return 0; } template <size_t size> inline errno_t strcpy_s(char (&dest)[size], const char *src) { size_t srcLen = 0; if (!dest) return EINVAL; dest[0] = '\0'; if (!src) return EINVAL; srcLen = strlen(src); if (size < srcLen + 1) return ERANGE; strncpy(dest, src, size); dest[srcLen] = '\0'; return 0; } inline errno_t strncpy_s(char *dest, size_t numberOfElements, const char *src, size_t count) { if (!dest) return EINVAL; if (numberOfElements == 0) return EINVAL; dest[0] = '\0'; if (!src) return EINVAL; if (numberOfElements < count + 1) return ERANGE; strncpy(dest, src, count); dest[count] = '\0'; return 0; }
Achtung!
Diese Implementierung entspricht nicht 100% den ofiziellen Quellen und nur als Workaround zu betrachten!
Insbesondere es wird kein Handler für ungültige Parameter aufgerufen, was bei den Originalfunktionen der Fall wäre!
Stand: 21.06.2016
— : Jürgen Kreick
EOF