54 lines · 1.7 KB · Text
RawDownload
= memccpy,  memchr,  memcmp,  memcpy,  memmove, memset: memory operations     void* memccpy(void *s1, void *s2, int c, long n)     void* memchr(void *s, int c, long n)     int   memcmp(void *s1, void *s2, long n)     void* memcpy(void *s1, void *s2, long n)     void* memmove(void *s1, void *s2, long n)     void* memset(void *s, int c, long n) These functions operate efficiently on memory  areas  (arraysof  bytes bounded by a count, not terminated by a zero byte).They do not check for the overflow of  any  receiving  memoryarea. Memccpy  copies  bytes  from memory area s2 into s1, stoppingafter the first occurrence of byte  c  has  been  copied,  orafter  n  bytes  have been copied, whichever comes first.  Itreturns a pointer to the byte after the copy of c in  s1,  orzero if c was not found in the first n bytes of s2. Memchr returns a pointer to the first occurrence of byte c inthe first n bytes of memory area s, or zero  if  c  does  notoccur. Memcmp  compares  its arguments, looking at the first n bytesonly, and returns an integer less than, equal to, or  greaterthan 0, according as s1 is lexicographically less than, equalto, or greater than s2.  The comparison is bytewise unsigned. Memmove copies n bytes from memory area s2 to s1.  It returnss1.  It is guaranteed to work if s1 and s2 overlap. In  the  Inferno kernel memcpy is equivalent to memmove.  (InANSI C, by contrast, memcpy does not account for  overlappingmemory regions.) Memset  sets  the first n bytes in memory area s to the valueof the least significant byte of c.  It returns s. == diagnosticsIf memcpy and memmove are handed negative counts, they abort. == source/libkern/mem*.c/libkern/mem*-objtype.s == see ALSOstrcat(10.2)