====== xxxxxx_s()-Funktionen ====== 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 #include 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 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\\ --- //[[feedback.jk-wiki@kreick.de|: Jürgen Kreick]]// EOF