فهرست منبع

Replace LGPL version of strlcpy by OpenBSD one which is BSD-licensed

Julien 'Lta' BALLET 11 سال پیش
والد
کامیت
6800e9c651
1فایلهای تغییر یافته به همراه41 افزوده شده و 42 حذف شده
  1. 41 42
      compat/strlcpy.c

+ 41 - 42
compat/strlcpy.c

@@ -1,52 +1,51 @@
-/*****************************************************************************
- * strlcpy.c: BSD strlcpy() replacement
- *****************************************************************************
- * Copyright © 2006, 2009 Rémi Denis-Courmont
- *
- * This program 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.
+/*	$OpenBSD: strlcpy.c,v 1.11 2006/05/05 15:27:38 millert Exp $	*/
+
+/*
+ * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
  *
- * This program 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.
+ * 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.
  *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+ * 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 <stddef.h>
+#include <sys/types.h>
+#include <string.h>
 
-/**
- * Copy a string to a sized buffer. The result is always nul-terminated
- * (contrary to strncpy()).
- *
- * @param dest destination buffer
- * @param src string to be copied
- * @param len maximum number of characters to be copied plus one for the
- * terminating nul.
- *
- * @return strlen(src)
+/*
+ * Copy src to string dst of size siz.  At most siz-1 characters
+ * will be copied.  Always NUL terminates (unless siz == 0).
+ * Returns strlen(src); if retval >= siz, truncation occurred.
  */
-size_t strlcpy (char *tgt, const char *src, size_t bufsize)
+size_t
+strlcpy(char *dst, const char *src, size_t siz)
 {
-    size_t length;
-
-    for (length = 1; (length < bufsize) && *src; length++)
-        *tgt++ = *src++;
+	char *d = dst;
+	const char *s = src;
+	size_t n = siz;
 
-    if (bufsize)
-        *tgt = '\0';
+	/* Copy as many bytes as will fit */
+	if (n != 0) {
+		while (--n != 0) {
+			if ((*d++ = *s++) == '\0')
+				break;
+		}
+	}
 
-    while (*src++)
-        length++;
+	/* Not enough room in dst, add NUL and traverse rest of src */
+	if (n == 0) {
+		if (siz != 0)
+			*d = '\0';		/* NUL-terminate dst */
+		while (*s++)
+			;
+	}
 
-    return length - 1;
+	return(s - src - 1);	/* count does not include NUL */
 }