Skip to content

Commit 5605c25

Browse files
committed
fixed fclose and added stdio.h rename
1 parent 08ffcf2 commit 5605c25

File tree

5 files changed

+185
-1
lines changed

5 files changed

+185
-1
lines changed

src/libc/fclose.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ int __attribute__((weak)) fclose(FILE *stream)
1919

2020
_file_streams[slot - 1].slot = 0;
2121

22-
return ti_Close(slot);
22+
int status = ti_Close(slot);
23+
return (status == 0) ? EOF : 0;
2324
}

src/libc/rename.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#include <stdio.h>
2+
#include <fileioc.h>
3+
4+
__attribute__((__weak__))
5+
int rename(const char *old_filename, const char *new_filename) {
6+
return (int)ti_Rename(old_filename, new_filename);
7+
}

test/fileioc/rename/autotest.json

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{
2+
"transfer_files":
3+
[
4+
"bin/DEMO.8xp"
5+
],
6+
"target":
7+
{
8+
"name": "DEMO",
9+
"isASM": true
10+
},
11+
"sequence":
12+
[
13+
"action|launch",
14+
"delay|500",
15+
"hashWait|1",
16+
"key|enter",
17+
"delay|300",
18+
"hashWait|2"
19+
],
20+
"hashes":
21+
{
22+
"1":
23+
{
24+
"description": "All tests passed",
25+
"start": "vram_start",
26+
"size": "vram_16_size",
27+
"expected_CRCs": [ "38E2AD5A" ]
28+
},
29+
"2":
30+
{
31+
"description": "Test homescreen cleared",
32+
"start": "vram_start",
33+
"size": "vram_16_size",
34+
"expected_CRCs": [ "FFAF89BA", "101734A5", "9DA19F44", "A32840C8", "349F4775" ]
35+
}
36+
}
37+
}

test/fileioc/rename/makefile

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# ----------------------------
2+
# Makefile Options
3+
# ----------------------------
4+
5+
NAME = DEMO
6+
ICON = icon.png
7+
DESCRIPTION = "CE C Toolchain Demo"
8+
COMPRESSED = NO
9+
ARCHIVED = NO
10+
11+
CFLAGS = -Wall -Wextra -Oz
12+
CXXFLAGS = -Wall -Wextra -Oz
13+
14+
# ----------------------------
15+
16+
include $(shell cedev-config --makefile)

test/fileioc/rename/src/main.c

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#include <stdbool.h>
2+
#include <stdio.h>
3+
#include <ti/screen.h>
4+
#include <ti/getcsc.h>
5+
#include <ti/sprintf.h>
6+
#include <sys/util.h>
7+
#include <fileioc.h>
8+
#include <errno.h>
9+
#include <stdint.h>
10+
11+
#define C(expr) if (!(expr)) { return __LINE__; }
12+
#define TEST(test) { ret = test; if (ret != 0) { return ret; }}
13+
14+
static const char *name0 = "foo1";
15+
static const char *name1 = "bar2";
16+
static const char *name2 = "foobar3";
17+
18+
int test_fileioc_rename(void) {
19+
uint8_t test_fileioc;
20+
uint8_t other_fileioc;
21+
22+
test_fileioc = ti_Open(name0, "w");
23+
other_fileioc = ti_Open(name2, "w");
24+
25+
C(test_fileioc != 0);
26+
C(other_fileioc != 0);
27+
28+
// close out of order
29+
30+
C(ti_Close(other_fileioc) != 0);
31+
C(ti_Close(test_fileioc) != 0);
32+
33+
// test renames
34+
35+
// old name doesn't exist
36+
C(ti_Rename(name1, name0) != 0);
37+
38+
// new name already exists
39+
C(ti_Rename(name0, name2) != 0);
40+
41+
// valid rename
42+
C(ti_Rename(name0, name1) == 0);
43+
44+
// delete a file that doesn't exist
45+
C(ti_Delete(name0) == 0);
46+
47+
// delete a valid file
48+
C(ti_Delete(name1) != 0);
49+
50+
// delete the same file again
51+
C(ti_Delete(name1) == 0);
52+
53+
// delete a valid file
54+
C(ti_Delete(name2) != 0);
55+
56+
return 0;
57+
}
58+
59+
int test_stdio_rename(void) {
60+
FILE *test_stdio;
61+
FILE *other_stdio;
62+
63+
test_stdio = fopen(name0, "w");
64+
other_stdio = fopen(name2, "w");
65+
66+
C(test_stdio != NULL);
67+
C(other_stdio != NULL);
68+
69+
C(fclose(other_stdio) == 0);
70+
C(fclose(test_stdio) == 0);
71+
72+
// old name doesn't exist
73+
C(rename(name1, name0) != 0);
74+
75+
// new name already exists
76+
C(rename(name0, name2) != 0);
77+
78+
// valid rename
79+
C(rename(name0, name1) == 0);
80+
81+
// delete a file that doesn't exist
82+
C(remove(name0) != 0);
83+
84+
// delete a valid file
85+
C(remove(name1) == 0);
86+
87+
// delete the same file again
88+
C(remove(name1) != 0);
89+
90+
// delete a valid file
91+
C(remove(name2) == 0);
92+
93+
return 0;
94+
}
95+
96+
int run_tests(void) {
97+
int ret = 0;
98+
99+
TEST(test_fileioc_rename());
100+
TEST(test_stdio_rename());
101+
102+
return ret;
103+
}
104+
105+
int main(void) {
106+
os_ClrHome();
107+
errno = 0;
108+
int failed_test = run_tests();
109+
if (errno != 0) {
110+
perror(NULL);
111+
}
112+
if (failed_test != 0) {
113+
char buf[sizeof("Failed test L-8388608\n")];
114+
boot_sprintf(buf, "Failed test L%d\n", failed_test);
115+
fputs(buf, stdout);
116+
} else {
117+
fputs("All tests passed", stdout);
118+
}
119+
120+
while (!os_GetCSC());
121+
122+
return 0;
123+
}

0 commit comments

Comments
 (0)