local_string_utils.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:3k
源码类别:

Windows CE

开发平台:

C/C++

  1. /* flac - Command-line FLAC encoder/decoder
  2.  */
  3. #include <string.h>
  4. #include "utils.h"
  5. /* $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $
  6.  *
  7.  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
  8.  *
  9.  * Permission to use, copy, modify, and distribute this software for any
  10.  * purpose with or without fee is hereby granted, provided that the above
  11.  * copyright notice and this permission notice appear in all copies.
  12.  *
  13.  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  14.  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  15.  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  16.  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  17.  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  18.  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  19.  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  20.  *
  21.  *
  22.  * Copy src to string dst of size siz.  At most siz-1 characters
  23.  * will be copied.  Always NUL terminates (unless siz == 0).
  24.  * Returns strlen(src); if retval >= siz, truncation occurred.
  25.  */
  26. size_t
  27. flac__strlcpy(char *dst, const char *src, size_t siz)
  28. {
  29. register char *d = dst;
  30. register const char *s = src;
  31. register size_t n = siz;
  32. /* Copy as many bytes as will fit */
  33. if (n != 0 && --n != 0) {
  34. do {
  35. if ((*d++ = *s++) == 0)
  36. break;
  37. } while (--n != 0);
  38. }
  39. /* Not enough room in dst, add NUL and traverse rest of src */
  40. if (n == 0) {
  41. if (siz != 0)
  42. *d = ''; /* NUL-terminate dst */
  43. while (*s++)
  44. ;
  45. }
  46. return(s - src - 1); /* count does not include NUL */
  47. }
  48. /* $OpenBSD: strlcat.c,v 1.11 2003/06/17 21:56:24 millert Exp $
  49.  *
  50.  * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
  51.  *
  52.  * Permission to use, copy, modify, and distribute this software for any
  53.  * purpose with or without fee is hereby granted, provided that the above
  54.  * copyright notice and this permission notice appear in all copies.
  55.  *
  56.  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  57.  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  58.  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  59.  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  60.  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  61.  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  62.  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  63.  *
  64.  *
  65.  * Appends src to string dst of size siz (unlike strncat, siz is the
  66.  * full size of dst, not space left).  At most siz-1 characters
  67.  * will be copied.  Always NUL terminates (unless siz <= strlen(dst)).
  68.  * Returns strlen(src) + MIN(siz, strlen(initial dst)).
  69.  * If retval >= siz, truncation occurred.
  70.  */
  71. size_t
  72. flac__strlcat(char *dst, const char *src, size_t siz)
  73. {
  74. register char *d = dst;
  75. register const char *s = src;
  76. register size_t n = siz;
  77. size_t dlen;
  78. /* Find the end of dst and adjust bytes left but don't go past end */
  79. while (n-- != 0 && *d != '')
  80. d++;
  81. dlen = d - dst;
  82. n = siz - dlen;
  83. if (n == 0)
  84. return(dlen + strlen(s));
  85. while (*s != '') {
  86. if (n != 1) {
  87. *d++ = *s;
  88. n--;
  89. }
  90. s++;
  91. }
  92. *d = '';
  93. return(dlen + (s - src)); /* count does not include NUL */
  94. }