xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

strlcpy.c (1737B)


      1 /*
      2  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
      3  *
      4  * Permission to use, copy, modify, and distribute this software for any
      5  * purpose with or without fee is hereby granted, provided that the above
      6  * copyright notice and this permission notice appear in all copies.
      7  *
      8  * THE SOFTWARE IS PROVIDED "AS IS" AND TODD C. MILLER DISCLAIMS ALL
      9  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
     10  * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL TODD C. MILLER BE LIABLE
     11  * FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
     13  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
     14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     15  */
     16 
     17 #ifdef HAVE_DIX_CONFIG_H
     18 #include <dix-config.h>
     19 #endif
     20 
     21 #include <sys/types.h>
     22 #include <string.h>
     23 #include "os.h"
     24 
     25 #ifndef HAVE_STRLCPY
     26 /*
     27  * Copy src to string dst of size siz.  At most siz-1 characters
     28  * will be copied.  Always NUL terminates (unless siz == 0).
     29  * Returns strlen(src); if retval >= siz, truncation occurred.
     30  */
     31 size_t
     32 strlcpy(char *dst, const char *src, size_t siz)
     33 {
     34     register char *d = dst;
     35     register const char *s = src;
     36     register size_t n = siz;
     37 
     38     /* Copy as many bytes as will fit */
     39     if (n != 0 && --n != 0) {
     40         do {
     41             if ((*d++ = *s++) == 0)
     42                 break;
     43         } while (--n != 0);
     44     }
     45 
     46     /* Not enough room in dst, add NUL and traverse rest of src */
     47     if (n == 0) {
     48         if (siz != 0)
     49             *d = '\0';          /* NUL-terminate dst */
     50         while (*s++);
     51     }
     52 
     53     return s - src - 1;         /* count does not include NUL */
     54 }
     55 #endif