(root)/
libxcrypt-4.4.36/
lib/
util-xstrcpy.c
       1  /* Copyright (C) 2018-2019 Björn Esser <besser82@fedoraproject.org>
       2   *
       3   * Redistribution and use in source and binary forms, with or without
       4   * modification, are permitted.
       5   *
       6   * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
       7   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
       8   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
       9   * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
      10   * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
      11   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
      12   * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
      13   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
      14   * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
      15   * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
      16   * SUCH DAMAGE.
      17   */
      18  
      19  /* Simple commonly used helper functions.  */
      20  
      21  #include "crypt-port.h"
      22  
      23  /* Provide a safe way to copy strings with the guarantee src,
      24     including its terminating '\0', will fit d_size bytes.
      25     The trailing bytes of d_size will be filled with '\0'.
      26     dst and src must not be NULL.  Returns strlen (src).  */
      27  size_t
      28  strcpy_or_abort (void *dst, size_t d_size, const void *src)
      29  {
      30    assert (dst != NULL);
      31    assert (src != NULL);
      32    size_t s_size = strlen ((const char *)src);
      33    assert (d_size >= s_size + 1);
      34  
      35    memcpy (dst, src, s_size);
      36    memset (((char *)dst) + s_size, 0, d_size - s_size);
      37    return s_size;
      38  }