blob: 9570aacd7f4b5be09e58016aaeda9cd74cd14185 [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 */
Eric Andersenaad1a882001-03-16 22:47:14 +00009#include "libbb.h"
10
Eric Andersenc7bda1c2004-03-15 08:29:22 +000011/* Like strncpy but make sure the resulting string is always 0 terminated. */
Denis Vlasenkodefc1ea2008-06-27 02:52:20 +000012char* FAST_FUNC safe_strncpy(char *dst, const char *src, size_t size)
Eric Andersenc7bda1c2004-03-15 08:29:22 +000013{
Denis Vlasenkode59c0f2006-10-05 22:50:22 +000014 if (!size) return dst;
15 dst[--size] = '\0';
16 return strncpy(dst, src, size);
Eric Andersenaad1a882001-03-16 22:47:14 +000017}
Denis Vlasenko0f293b92008-07-22 20:16:55 +000018
19/* Like strcpy but can copy overlapping strings. */
20void FAST_FUNC overlapping_strcpy(char *dst, const char *src)
21{
Denys Vlasenko0016bce2010-10-19 23:07:49 +020022 /* Cheap optimization for dst == src case -
23 * better to have it here than in many callers.
24 */
25 if (dst != src) {
26 while ((*dst = *src) != '\0') {
27 dst++;
28 src++;
29 }
Denis Vlasenko0f293b92008-07-22 20:16:55 +000030 }
31}