// TITLE("memccpy") //++ // // Copyright (c) 1994 IBM Corporation // // Module Name: // // memccpy.s // // Routine Description: // // Copies bytes from src to dest until count bytes have been // copied, or up to and including the character c, whichever // comes first. // // Author: // // Jeff Simon (jhs) 02-Aug-1994 // // Environment: // // User or Kernel mode. // // Revision History: // // Includes #include // // Arguments: // // SRC1 (r.3) - A pointer to the memory destination // // SRC1 (r.4) - A pointer to the memory source // // CHAR (r.5) - A character to stop copy // // LNGTH (r.6) - Max number of comparison in bytes // // Return Value: // // NULL if search character is not found or not copied // ptr to byte immediately after search character ... // ... if character found AND copied // // void * _CALLTYPE1 _memccpyc ( // void * dest, // const void * src, // int c, // unsigned count // ) // LEAF_ENTRY(_memccpy) addi r7,r6,1 # incr count, artificial mtctr r7 # move count to ctr bdz L..7A # if 0, finish up lbz r8,0(r4) # read 1st char subi r3,r3,1 # prep r3 for update form L..3: stbu r8,1(r3) # copy char cmp 0x0,0x0,r8,r5 # compare to char c beq L..5 # found char c, say goodbye bdz L..7A # count 0, say goodbye lbzu r8,1(r4) # read next char b L..3 # do another L..5: addi r3,r3,1 # ret r3+1 b L..7 # all done, one exit pt. L..7A: addi r3,r0,0 # return null L..7: LEAF_EXIT(_memccpy)