text: #include "utils.h"
  
  /*
   * Copy `src` string to `dst` of size `siz`.  At most `siz-1` characters
   * will be copied.  Always NULL terminates (unless `siz == 0`).
   * Returns `strlen(src)`; if `retval >= siz`, truncation occurred.
   */
  size_t strlcpy(char *dst, const char *src, size_t siz) {
    char *d = dst;
    const char *s = src;
    size_t n = siz;
  
    /**
     * Copy as many bytes as will fit.
     */
    if (n != 0) {
      while (--n != 0) {
        if ((*d++ = *s++) == '\0')
          break;
      }
    }
  
    /**
     * Not enough room in `dst`, add `NULL` and traverse rest of `src`.
     */
    if (n == 0) {
      if (siz != 0) {
        /**
         * NULL-terminate `dst`.
         */
        *d = '\0';
      }
      while (*s++)
        ;
    }
  
    /**
     * Count does not include NULL.
     */
    return (s - src - 1);
  }
  