From 133832c5a330244996e2f542a1c0dd5bc415a4b1 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 30 Jan 2021 13:52:21 +1000 Subject: [PATCH] Decompile strncpy --- src/include/lib/lib_13130.h | 2 +- src/lib/lib_13130.c | 59 ++++++++++++++++++------------------- 2 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/include/lib/lib_13130.h b/src/include/lib/lib_13130.h index 95fc76dcc..46a95f5bc 100644 --- a/src/include/lib/lib_13130.h +++ b/src/include/lib/lib_13130.h @@ -4,7 +4,7 @@ #include "types.h" char *strcpy(char *dest, char *src); -char *strncpy(char *dest, char *src, u32 len); +char *strncpy(char *dst, char *s2, s32 len); char *strcat(char *dst, char *src); s32 strcmp(char *s1, char *s2); s32 strncmp(char *s1, char *s2, s32 len); diff --git a/src/lib/lib_13130.c b/src/lib/lib_13130.c index 1eb78604e..7e5408dfc 100644 --- a/src/lib/lib_13130.c +++ b/src/lib/lib_13130.c @@ -65,37 +65,34 @@ glabel strcpy /* 131c4: 00000000 */ nop ); -GLOBAL_ASM( -glabel strncpy -/* 131c8: 90a20000 */ lbu $v0,0x0($a1) -/* 131cc: 24830001 */ addiu $v1,$a0,0x1 -/* 131d0: 24a50001 */ addiu $a1,$a1,0x1 -/* 131d4: 10400009 */ beqz $v0,.L000131fc -/* 131d8: a0820000 */ sb $v0,0x0($a0) -.L000131dc: -/* 131dc: 24c6ffff */ addiu $a2,$a2,-1 -/* 131e0: 50c00007 */ beqzl $a2,.L00013200 -/* 131e4: 00c01025 */ or $v0,$a2,$zero -/* 131e8: 90a20000 */ lbu $v0,0x0($a1) -/* 131ec: 24630001 */ addiu $v1,$v1,0x1 -/* 131f0: 24a50001 */ addiu $a1,$a1,0x1 -/* 131f4: 1440fff9 */ bnez $v0,.L000131dc -/* 131f8: a062ffff */ sb $v0,-0x1($v1) -.L000131fc: -/* 131fc: 00c01025 */ or $v0,$a2,$zero -.L00013200: -/* 13200: 10c00006 */ beqz $a2,.L0001321c -/* 13204: 24c6ffff */ addiu $a2,$a2,-1 -.L00013208: -/* 13208: 00c01025 */ or $v0,$a2,$zero -/* 1320c: a0600000 */ sb $zero,0x0($v1) -/* 13210: 24630001 */ addiu $v1,$v1,0x1 -/* 13214: 14c0fffc */ bnez $a2,.L00013208 -/* 13218: 24c6ffff */ addiu $a2,$a2,-1 -.L0001321c: -/* 1321c: 03e00008 */ jr $ra -/* 13220: 00801025 */ or $v0,$a0,$zero -); +char *strncpy(char *dst, char *src, s32 len) +{ + char *ptr = dst; + char c; + + *ptr = c = *src; + ptr++; + src++; + + while (c != '\0') { + len--; + + if (len == 0) { + break; + } + + *ptr = c = *src; + ptr++; + src++; + } + + while (len--) { + *ptr = '\0'; + ptr++; + } + + return dst; +} char *strcat(char *dst, char *src) {