blob: 5eb0db0bd4c5732e47e94eadd94d0fa403525b33 [file] [log] [blame]
Eric Andersenaad1a882001-03-16 22:47:14 +00001/* vi: set sw=4 ts=4: */
2/*
3 * Utility routines.
4 *
Eric Andersenc7bda1c2004-03-15 08:29:22 +00005 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
Eric Andersenaad1a882001-03-16 22:47:14 +00006 *
Denys Vlasenko0ef64bd2010-08-16 20:14:46 +02007 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
Eric Andersenaad1a882001-03-16 22:47:14 +00008 */
9
Eric Andersenaad1a882001-03-16 22:47:14 +000010#include "libbb.h"
11
Eric Andersenc7bda1c2004-03-15 08:29:22 +000012/* Like strncpy but make sure the resulting string is always 0 terminated. */
Denis Vlasenkodefc1ea2008-06-27 02:52:20 +000013char* FAST_FUNC safe_strncpy(char *dst, const char *src, size_t size)
Eric Andersenc7bda1c2004-03-15 08:29:22 +000014{
Denis Vlasenkode59c0f2006-10-05 22:50:22 +000015 if (!size) return dst;
16 dst[--size] = '\0';
17 return strncpy(dst, src, size);
Eric Andersenaad1a882001-03-16 22:47:14 +000018}
Denis Vlasenko0f293b92008-07-22 20:16:55 +000019
20/* Like strcpy but can copy overlapping strings. */
21void FAST_FUNC overlapping_strcpy(char *dst, const char *src)
22{
Denys Vlasenko0016bce2010-10-19 23:07:49 +020023 /* Cheap optimization for dst == src case -
24 * better to have it here than in many callers.
25 */
26 if (dst != src) {
27 while ((*dst = *src) != '\0') {
28 dst++;
29 src++;
30 }
Denis Vlasenko0f293b92008-07-22 20:16:55 +000031 }
32}