Skip to content

Commit 3c2aeb6

Browse files
Merge pull request #1 from OmniBlade/stdlib
Implements stdblib.c functions.
2 parents cfbafe8 + a1d9dff commit 3c2aeb6

File tree

2 files changed

+57
-7
lines changed

2 files changed

+57
-7
lines changed

src/BRSRC13/CORE/STD/stdlib.c

+56-6
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,182 @@
11
#include "stdlib.h"
2+
#include <errno.h>
3+
#include <stdarg.h>
4+
#include <stdio.h>
5+
#include <stdlib.h>
6+
#include <string.h>
27

38
// Global variables
9+
// DOSPICK has "$Id: stdlib.c 2.4 1996/12/06 21:18:39 sam Exp $" for this. Do we want to implement these?
410
char rscid[48];
511

612
// Offset: 9
713
// Size: 50
814
int BrMemCmp(void *s1, void *s2, size_t n) {
15+
return memcmp(s1, s2, n);
916
}
1017

1118
// Offset: 68
1219
// Size: 50
1320
void* BrMemCpy(void *s1, void *s2, size_t n) {
21+
memcpy(d, s, n);
1422
}
1523

1624
// Offset: 127
1725
// Size: 50
1826
void* BrMemSet(void *s, int c, size_t n) {
27+
memset(d, c, n);
1928
}
2029

2130
// Offset: 186
2231
// Size: 47
2332
char* BrStrCat(char *s1, char *s2) {
33+
return strcat(d, s);
2434
}
2535

2636
// Offset: 242
2737
// Size: 47
2838
int BrStrCmp(char *s1, char *s2) {
39+
return strcmp(s1, s2);
2940
}
3041

3142
// Offset: 299
3243
// Size: 47
3344
int BrStrICmp(char *s1, char *s2) {
45+
// Windows is stricmp, while posix is strcasecmp
46+
#ifdef _WIN32
47+
return stricmp(s1, s2, n);
48+
#else
49+
return strcasecmp(s1, s2, n);
50+
#endif
3451
}
3552

3653
// Offset: 355
3754
// Size: 47
3855
char* BrStrCpy(char *s1, char *s2) {
56+
return strcpy(d, s);
3957
}
4058

4159
// Offset: 411
4260
// Size: 44
4361
br_size_t BrStrLen(char *s) {
62+
return strlen(s);
4463
}
4564

4665
// Offset: 465
4766
// Size: 50
4867
int BrStrNCmp(char *s1, char *s2, size_t n) {
68+
return strncmp(s1, s2, n);
4969
}
5070

5171
// Offset: 526
5272
// Size: 50
5373
int BrStrNICmp(char *s1, char *s2, size_t n) {
74+
// Windows is strnicmp, while posix is strncasecmp
75+
#ifdef _WIN32
76+
return strnicmp(s1, s2, n);
77+
#else
78+
return strncasecmp(s1, s2, n);
79+
#endif
5480
}
5581

5682
// Offset: 586
5783
// Size: 50
5884
char* BrStrNCpy(char *s1, char *s2, size_t n) {
85+
return strncpy(d, s, n);
5986
}
6087

6188
// Offset: 646
6289
// Size: 49
6390
char* BrStrRChr(char *s1, char c) {
91+
return strrchr(s, c);
6492
}
6593

6694
// Offset: 703
6795
// Size: 35
68-
void BrAbort() {
96+
void BrAbort(void) {
97+
abort();
6998
}
7099

71100
// Offset: 747
72101
// Size: 44
73102
char* BrGetEnv(char *name) {
103+
return getenv(name);
74104
}
75105

76106
// Offset: 800
77107
// Size: 58
78108
float BrStrToF(char *nptr, char **endptr) {
109+
return strtof(num, endp);
79110
}
80111

81112
// Offset: 867
82113
// Size: 67
83114
double BrStrToD(char *nptr, char **endptr) {
115+
return strtod(num, endp);
84116
}
85117

86118
// Offset: 943
87119
// Size: 50
88120
long BrStrToL(char *nptr, char **endptr, int base) {
121+
return strtol(num, endp, base);
89122
}
90123

91124
// Offset: 1003
92125
// Size: 50
93126
unsigned long BrStrToUL(char *nptr, char **endptr, int base) {
127+
return strtoul(num, endp, base);
94128
}
95129

96130
// Offset: 1063
97131
// Size: 59
98132
br_boolean BrIsAlpha(int c) {
133+
return isalpha(c);
99134
}
100135

101136
// Offset: 1132
102137
// Size: 59
103138
br_boolean BrIsDigit(int c) {
139+
return isdigit(c);
104140
}
105141

106142
// Offset: 1201
107143
// Size: 59
108144
br_boolean BrIsSpace(int c) {
145+
return isspace(c);
109146
}
110147

111148
// Offset: 1270
112149
// Size: 59
113150
br_boolean BrIsPrint(int c) {
151+
return isprint(c)
114152
}
115153

116154
// Offset: 1340
117155
// Size: 50
118-
br_int_32 BrVSprintf(char *buf, char *fmt, char **args) {
156+
br_int_32 BrVSprintf(char *buf, char *fmt, va_list args) {
157+
return vsprintf(s, f, a);
119158
}
120159

121160
// Offset: 1402
122161
// Size: 101
123-
br_int_32 BrVSprintfN(char *buf, br_size_t buf_size, char *fmt, char **args) {
124-
unsigned int n;
125-
char tmp[512];
162+
br_int_32 BrVSprintfN(char *buf, br_size_t buf_size, char *fmt, va_list args) {
163+
// Most C libs have vsnprintf these days that can replace this.
164+
unsigned int n;
165+
char tmp[512];
166+
167+
n = vsprintf(tmp, fmt, args);
168+
169+
if ( buf_size - 1 < n ) {
170+
n = buf_size - 1;
171+
}
172+
173+
strncpy(buf, tmp, n);
174+
buf[n] = '\0';
126175
}
127176

128177
// Offset: 1513
129178
// Size: 50
130-
br_int_32 BrVSScanf(char *buf, char *fmt, char **args) {
179+
br_int_32 BrVSScanf(char *buf, char *fmt, va_list args) {
180+
return vsscanf(s, f, a);
131181
}
132182

src/BRSRC13/CORE/STD/stdlib.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ char* BrStrRChr(char *s1, char c);
5050

5151
// Offset: 703
5252
// Size: 35
53-
void BrAbort();
53+
void BrAbort(void);
5454

5555
// Offset: 747
5656
// Size: 44

0 commit comments

Comments
 (0)