2 Unix SMB/CIFS implementation.
3 replacement routines for broken systems
4 Copyright (C) Andrew Tridgell 1992-1998
5 Copyright (C) Jelmer Vernooij 2005-2008
7 ** NOTE! The following LGPL license applies to the replace
8 ** library. This does NOT imply that all of Samba is released
11 This library is free software; you can redistribute it and/or
12 modify it under the terms of the GNU Lesser General Public
13 License as published by the Free Software Foundation; either
14 version 3 of the License, or (at your option) any later version.
16 This library is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 Lesser General Public License for more details.
21 You should have received a copy of the GNU Lesser General Public
22 License along with this library; if not, see <http://www.gnu.org/licenses/>.
25 #include <sys/types.h>
30 /* glibc doesn't have strlcpy, strlcat. Ensure we do. JRA. We
31 * don't link to libreplace so need them here. */
33 /* like strncpy but does not 0 fill the buffer and always null
34 * terminates. bufsize is the size of the destination buffer */
37 size_t strlcpy(char *d, const char *s, size_t bufsize)
39 size_t len = strlen(s);
41 if (bufsize <= 0) return 0;
42 if (len >= bufsize) len = bufsize-1;
49 /* like strncat but does not 0 fill the buffer and always null
50 * terminates. bufsize is the length of the buffer, which should
51 * be one more than the maximum resulting string length */
54 size_t strlcat(char *d, const char *s, size_t bufsize)
56 size_t len1 = strlen(d);
57 size_t len2 = strlen(s);
58 size_t ret = len1 + len2;
60 if (len1+len2 >= bufsize) {
61 if (bufsize < (len1+1)) {
64 len2 = bufsize - (len1+1);
67 memcpy(d+len1, s, len2);
74 /* caller frees username if necessary */
76 getusername(uid_t uid)
78 char *username = NULL;
79 struct passwd *password = getpwuid(uid);
82 username = password->pw_name;