Blame snmplib/strlcpy.c

Packit fcad23
/*
Packit fcad23
 * Copyright © 2003 Sun Microsystems, Inc. All rights reserved.
Packit fcad23
 * Use is subject to license terms specified in the COPYING file
Packit fcad23
 * distributed with the Net-SNMP package.
Packit fcad23
 */
Packit fcad23
#include <net-snmp/net-snmp-config.h>
Packit fcad23
Packit fcad23
#if HAVE_STRING_H
Packit fcad23
#include <string.h>
Packit fcad23
#else
Packit fcad23
#include <strings.h>
Packit fcad23
#endif
Packit fcad23
Packit fcad23
#include <sys/types.h>
Packit fcad23
Packit fcad23
#include <net-snmp/library/system.h>
Packit fcad23
Packit fcad23
/* 
Packit fcad23
 * Copies src to the dest buffer. The copy will never overflow the dest buffer
Packit fcad23
 * and dest will always be null terminated, len is the size of the dest buffer.
Packit fcad23
 *
Packit fcad23
 * Returns the length of the src buffer.
Packit fcad23
 */ 
Packit fcad23
size_t 
Packit fcad23
strlcpy(char *dest, const char *src, size_t len) 
Packit fcad23
{ 
Packit fcad23
	size_t src_len = strlen(src); 
Packit fcad23
	size_t new_len; 
Packit fcad23
Packit fcad23
	if (len == 0) {
Packit fcad23
		return (src_len);
Packit fcad23
	}
Packit fcad23
Packit fcad23
        if (src_len >= len) {
Packit fcad23
		new_len = len - 1;
Packit fcad23
	} else {
Packit fcad23
                new_len = src_len;
Packit fcad23
	}
Packit fcad23
Packit fcad23
        memcpy(dest, src, new_len); 
Packit fcad23
	dest[new_len] = '\0'; 
Packit fcad23
	return (src_len); 
Packit fcad23
}