Subversion Repositories Kolibri OS

Rev

Rev 6102 | Rev 6936 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*
  2.  *  linux/lib/string.c
  3.  *
  4.  *  Copyright (C) 1991, 1992  Linus Torvalds
  5.  */
  6.  
  7. /*
  8.  * stupid library routines.. The optimized versions should generally be found
  9.  * as inline code in <asm-xx/string.h>
  10.  *
  11.  * These are buggy as well..
  12.  *
  13.  * * Fri Jun 25 1999, Ingo Oeser <ioe@informatik.tu-chemnitz.de>
  14.  * -  Added strsep() which will replace strtok() soon (because strsep() is
  15.  *    reentrant and should be faster). Use only strsep() in new code, please.
  16.  *
  17.  * * Sat Feb 09 2002, Jason Thomas <jason@topic.com.au>,
  18.  *                    Matthew Hawkins <matt@mh.dropbear.id.au>
  19.  * -  Kissed strtok() goodbye
  20.  */
  21.  
  22. #include <linux/types.h>
  23. #include <linux/string.h>
  24. #include <linux/ctype.h>
  25. #include <linux/kernel.h>
  26. #include <linux/export.h>
  27. #include <linux/bug.h>
  28. #include <linux/errno.h>
  29.  
  30.  
  31.  
  32. #ifndef __HAVE_ARCH_STRLCPY
  33. /**
  34.  * strlcpy - Copy a C-string into a sized buffer
  35.  * @dest: Where to copy the string to
  36.  * @src: Where to copy the string from
  37.  * @size: size of destination buffer
  38.  *
  39.  * Compatible with *BSD: the result is always a valid
  40.  * NUL-terminated string that fits in the buffer (unless,
  41.  * of course, the buffer size is zero). It does not pad
  42.  * out the result like strncpy() does.
  43.  */
  44. size_t strlcpy(char *dest, const char *src, size_t size)
  45. {
  46.     size_t ret = strlen(src);
  47.  
  48.     if (size) {
  49.         size_t len = (ret >= size) ? size - 1 : ret;
  50.         memcpy(dest, src, len);
  51.         dest[len] = '\0';
  52.     }
  53.     return ret;
  54. }
  55.  
  56. #ifndef __HAVE_ARCH_STRLCAT
  57. /**
  58.  * strlcat - Append a length-limited, C-string to another
  59.  * @dest: The string to be appended to
  60.  * @src: The string to append to it
  61.  * @count: The size of the destination buffer.
  62.  */
  63. size_t strlcat(char *dest, const char *src, size_t count)
  64. {
  65.         size_t dsize = strlen(dest);
  66.         size_t len = strlen(src);
  67.         size_t res = dsize + len;
  68.  
  69.         /* This would be a bug */
  70.         BUG_ON(dsize >= count);
  71.  
  72.         dest += dsize;
  73.         count -= dsize;
  74.         if (len >= count)
  75.                 len = count-1;
  76.         memcpy(dest, src, len);
  77.         dest[len] = 0;
  78.         return res;
  79. }
  80. #endif
  81.  
  82.  
  83. #endif
  84.  
  85.