X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=lib%2Fstrlcpy.c;h=71ee9f1a5452740f3f585df1d81048b04d8a72b1;hb=897989f8710208ce8aa6cf5efe5de1927569fb4f;hp=41bab97ea744805f54e0542e33ce6facfbb150b8;hpb=a93baa31d34bf11fa0ec44f84470583398154b57;p=mirror_frr.git diff --git a/lib/strlcpy.c b/lib/strlcpy.c index 41bab97ea..71ee9f1a5 100644 --- a/lib/strlcpy.c +++ b/lib/strlcpy.c @@ -1,56 +1,58 @@ /* Copy a null-terminated string to a fixed-size buffer, with length checking. - Copyright (C) 2016 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ + * Copyright (C) 2016 Free Software Foundation, Inc. + * This file is part of the GNU C Library. + * + * The GNU C Library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * The GNU C 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with the GNU C Library; if not, see + * . + */ /* adapted for Quagga from glibc patch submission originally from * Florian Weimer , 2016-05-18 */ -#include - +#ifdef HAVE_CONFIG_H #include "config.h" +#endif + +#include #ifndef HAVE_STRLCPY #undef strlcpy -size_t -strlcpy (char *__restrict dest, const char *__restrict src, size_t size); +size_t strlcpy(char *__restrict dest, + const char *__restrict src, size_t destsize); -size_t -strlcpy (char *__restrict dest, const char *__restrict src, size_t size) +size_t strlcpy(char *__restrict dest, + const char *__restrict src, size_t destsize) { - size_t src_length = strlen (src); - - if (__builtin_expect (src_length >= size, 0)) - { - if (size > 0) - { - /* Copy the leading portion of the string. The last - character is subsequently overwritten with the NUL - terminator, but the destination size is usually a - multiple of a small power of two, so writing it twice - should be more efficient than copying an odd number of - bytes. */ - memcpy (dest, src, size); - dest[size - 1] = '\0'; - } - } - else - /* Copy the string and its terminating NUL character. */ - memcpy (dest, src, src_length + 1); - return src_length; + size_t src_length = strlen(src); + + if (__builtin_expect(src_length >= destsize, 0)) { + if (destsize > 0) { + /* + * Copy the leading portion of the string. The last + * character is subsequently overwritten with the NUL + * terminator, but the destination destsize is usually + * a multiple of a small power of two, so writing it + * twice should be more efficient than copying an odd + * number of bytes. + */ + memcpy(dest, src, destsize); + dest[destsize - 1] = '\0'; + } + } else + /* Copy the string and its terminating NUL character. */ + memcpy(dest, src, src_length + 1); + return src_length; } #endif /* HAVE_STRLCPY */