7dbd8de9fcb293104315a819b88d01be9f10542a
[IRC.git] / Robust / src / Runtime / file.c
1 #ifndef MULTICORE
2 #include <fcntl.h>
3 #include <sys/stat.h>
4 #include <unistd.h>
5 #endif
6 #include <sys/types.h>
7 #include "structdefs.h"
8 #include "mem.h"
9 #include "runtime.h"
10 #include "methodheaders.h"
11
12 #ifdef D___FileOutputStream______nativeWrite____I__AR_B_I_I
13 void CALL34(___FileOutputStream______nativeWrite____I__AR_B_I_I, int fd, int off, int len, int fd, struct ArrayObject * ___array___, int off, int len) {
14 #ifdef MULTICORE
15 #else
16   char * string= (((char *)&VAR(___array___)->___length___)+sizeof(int));
17   int status=write(fd, &string[off], len);
18 #endif
19 }
20 #endif
21
22 #ifdef D___FileOutputStream______nativeClose____I
23 void CALL11(___FileOutputStream______nativeClose____I, int fd, int fd) {
24 #ifdef MULTICORE
25 #else
26   close(fd);
27 #endif
28 }
29 #endif
30
31 #ifdef D___FileOutputStream______nativeFlush____I
32 void CALL11(___FileOutputStream______nativeFlush____I, int fd, int fd) {
33   // not supported in RAW version
34 #ifdef MULTICORE
35 #else
36   fsync(fd);
37 #endif
38 }
39 #endif
40
41 #ifdef D___FileOutputStream______nativeOpen_____AR_B
42 int CALL01(___FileOutputStream______nativeOpen_____AR_B, struct ArrayObject * ___filename___) {
43 #ifdef MULTICORE
44   return 0;
45 #else
46   int length=VAR(___filename___)->___length___;
47   char* filename= (((char *)&VAR(___filename___)->___length___)+sizeof(int));
48   int fd=open(filename, O_WRONLY|O_CREAT|O_TRUNC, S_IRWXU);
49   return fd;
50 #endif
51 }
52 #endif
53
54 #ifdef D___FileOutputStream______nativeAppend_____AR_B
55 int CALL01(___FileOutputStream______nativeAppend_____AR_B, struct ArrayObject * ___filename___) {
56 #ifdef MULTICORE
57   return 0;
58 #else  
59   int length=VAR(___filename___)->___length___;
60   char* filename= (((char *)&VAR(___filename___)->___length___)+sizeof(int));
61   int fd=open(filename, O_WRONLY|O_CREAT|O_APPEND, S_IRWXU);
62   return fd;
63 #endif
64 }
65 #endif
66
67 #ifdef D___FileInputStream______nativeOpen_____AR_B
68 int CALL01(___FileInputStream______nativeOpen_____AR_B, struct ArrayObject * ___filename___) {
69 #ifdef MULTICORE
70   return 0;
71 #else
72   int length=VAR(___filename___)->___length___;
73   char* filename= (((char *)&VAR(___filename___)->___length___)+sizeof(int));
74   int fd=open(filename, O_RDONLY, 0);
75   return fd;
76 #endif
77 }
78 #endif
79
80 #ifdef D___FileInputStream______nativeClose____I
81 void CALL11(___FileInputStream______nativeClose____I, int fd, int fd) {
82 #ifdef MULTICORE
83 #else
84   close(fd);
85 #endif
86 }
87 #endif
88
89 #ifdef D___FileInputStream______nativeRead____I__AR_B_I
90 int CALL23(___FileInputStream______nativeRead____I__AR_B_I, int fd, int numBytes, int fd, struct ArrayObject * ___array___, int numBytes) {
91 #ifdef MULTICORE
92   return -1;
93 #else
94   int toread=VAR(___array___)->___length___;
95   char* string= (((char *)&VAR(___array___)->___length___)+sizeof(int));
96   int status;
97
98   if (numBytes<toread)
99     toread=numBytes;
100
101   status=read(fd, string, toread);
102   return status;
103 #endif
104 }
105 #endif
106
107 #ifdef D___FileInputStream______nativePeek____I
108 int CALL11(___FileInputStream______nativePeek____I, int fd, int fd) {
109 #ifdef MULTICORE
110   return 0;
111 #else
112   int status;
113   char string[1];
114   status=read(fd, string, 1);
115
116   if( status <= 0 ) {
117     return status;
118   }
119   lseek(fd, -1, SEEK_CUR);
120   return string[0];
121 #endif
122 }
123 #endif
124
125 #ifdef D___File______nativeLength_____AR_B
126 long long CALL01(___File______nativeLength_____AR_B, struct ArrayObject * ___pathname___) {
127 #ifdef MULTICORE
128   return 0;
129 #else
130   int length=VAR(___pathname___)->___length___;
131   char* filename= (((char *)&VAR(___pathname___)->___length___)+sizeof(int));
132   struct stat st;
133   stat(filename, &st);
134   return st.st_size;
135 #endif
136 }
137 #endif