1 #include <unistd.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <ctype.h>
6 #include <sys/types.h>
7 #include <sys/stat.h>
8 #include <fcntl.h>
9 #include <sys/time.h>
10 
11 #include "fixer.h"
12 
_mbclen(const unsigned char * s)13 size_t _mbclen(const unsigned char *s)
14 {
15 	return strlen((const char *)s);
16 }
17 
CreateFile(const char * file,int mode,int x,int y,int flags,int flags2,int z)18 HANDLE CreateFile(const char *file, int mode, int x, int y, int flags, int flags2, int z)
19 {
20 	int fd;
21 
22 	fprintf(stderr, "CreateFile(%s, %d, %d, %d, %d, %d, %d)\n", file, mode, x, y, flags, flags2, z);
23 
24 	switch(mode) {
25 		case GENERIC_READ:
26 			if (flags != OPEN_EXISTING) {
27 				fprintf(stderr, "CreateFile: GENERIC_READ flags = %d\n", flags);
28 				exit(EXIT_FAILURE);
29 			}
30  			fd = open(file, O_RDONLY);
31  			if (fd == -1) {
32  				/* perror("CreateFile"); */
33  				return INVALID_HANDLE_VALUE;
34  			}
35 			break;
36 		case GENERIC_WRITE:
37 			if (flags != CREATE_ALWAYS) {
38 				fprintf(stderr, "CreateFile: GENERIC_WRITE flags = %d\n", flags);
39 				exit(EXIT_FAILURE);
40 			}
41 			fd = open(file, O_WRONLY|O_TRUNC|O_CREAT, S_IRUSR|S_IWUSR);
42 			if (fd == -1) {
43 				perror("CreateFile");
44 				return INVALID_HANDLE_VALUE;
45 			}
46 			break;
47 		case GENERIC_READ|GENERIC_WRITE:
48 		default:
49 			fprintf(stderr, "CreateFile: unknown mode %d\n", mode);
50 			exit(EXIT_FAILURE);
51 	}
52 
53 	return (HANDLE)fd;
54 }
55 
CreateFileA(const char * file,int write,int x,int y,int flags,int flags2,int z)56 HANDLE CreateFileA(const char *file, int write, int x, int y, int flags, int flags2, int z)
57 {
58 	return CreateFile(file, write, x, y, flags, flags2, z);
59 }
60 
WriteFile(HANDLE file,const void * data,int len,void * byteswritten,int lpOverlapped)61 int WriteFile(HANDLE file, const void *data, int len, void *byteswritten, int lpOverlapped)
62 {
63 	unsigned long *bw, i;
64 
65 	fprintf(stderr, "WriteFile(%d, %p, %d, %p, %d)\n", file, data, len, byteswritten, lpOverlapped);
66 
67 	bw = (unsigned long *)byteswritten;
68 	*bw = 0;
69 
70 	i = write(file, data, len);
71 	if (i == -1) {
72 		return 0;
73 	} else {
74 		*bw = i;
75 		return 1;
76 	}
77 }
78 
ReadFile(HANDLE file,void * data,int len,void * bytesread,int lpOverlapped)79 int ReadFile(HANDLE file, void *data, int len, void *bytesread, int lpOverlapped)
80 {
81 	unsigned long *br, i;
82 
83 	fprintf(stderr, "ReadFile(%d, %p, %d, %p, %d)\n", file, data, len, bytesread, lpOverlapped);
84 
85 	br = (unsigned long *)bytesread;
86 	*br = 0;
87 
88 	i = read(file, data, len);
89 	if (i == -1) {
90 		return 0;
91 	} else {
92 		*br = i;
93 		return 1;
94 	}
95 }
96 
GetFileSize(HANDLE file,int lpFileSizeHigh)97 int GetFileSize(HANDLE file, int lpFileSizeHigh)
98 {
99 	struct stat buf;
100 
101 	fprintf(stderr, "GetFileSize(%d, %d)\n", file, lpFileSizeHigh);
102 
103 	if (fstat(file, &buf) == -1)
104 		return -1;
105 	return buf.st_size;
106 }
107 
CloseHandle(HANDLE file)108 int CloseHandle(HANDLE file)
109 {
110 
111 	fprintf(stderr, "CloseHandle(%d)\n", file);
112 
113 	if (close(file) == -1)
114 		return 0;
115 	else
116 		return 1;
117 
118 	return 0;
119 }
120 
DeleteFile(const char * file)121 int DeleteFile(const char *file)
122 {
123 
124 	fprintf(stderr, "DeleteFile(%s)\n", file);
125 
126 	if (unlink(file) == -1)
127 		return 0;
128 	else
129 		return 1;
130 }
131 
DeleteFileA(const char * file)132 int DeleteFileA(const char *file)
133 {
134 	return DeleteFile(file);
135 }
136 
GetDiskFreeSpace(int x,unsigned long * a,unsigned long * b,unsigned long * c,unsigned long * d)137 int GetDiskFreeSpace(int x, unsigned long *a, unsigned long *b, unsigned long *c, unsigned long *d)
138 {
139 	fprintf(stderr, "GetDiskFreeSpace(%d, %p, %p, %p, %p)\n", x, a, b, c, d);
140 
141 	return 0;
142 }
143 
CreateDirectory(char * dir,int lpSecurityAttributes)144 int CreateDirectory(char *dir, int lpSecurityAttributes)
145 {
146 
147 	fprintf(stderr, "CreateDirectory(%s, %d)\n", dir, lpSecurityAttributes);
148 
149 	if (mkdir(dir, S_IRWXU) == -1)
150 		return 0;
151 	else
152 		return 1;
153 }
154 
MoveFile(const char * newfile,const char * oldfile)155 int MoveFile(const char *newfile, const char *oldfile)
156 {
157 	fprintf(stderr, "MoveFile(%s, %s)\n", newfile, oldfile);
158 
159 	return 0;
160 }
161 
MoveFileA(const char * newfile,const char * oldfile)162 int MoveFileA(const char *newfile, const char *oldfile)
163 {
164 	return MoveFile(newfile, oldfile);
165 }
166 
CopyFile(const char * newfile,const char * oldfile,int x)167 int CopyFile(const char *newfile, const char *oldfile, int x)
168 {
169 	fprintf(stderr, "CopyFile(%s, %s, %d)\n", newfile, oldfile, x);
170 
171 	return 0;
172 }
173 
GetFileAttributes(const char * file)174 int GetFileAttributes(const char *file)
175 {
176 	fprintf(stderr, "GetFileAttributes(%s)\n", file);
177 
178 	return 0;
179 }
180 
GetFileAttributesA(const char * file)181 int GetFileAttributesA(const char *file)
182 {
183 	return GetFileAttributes(file);
184 }
185 
SetFilePointer(HANDLE file,int x,int y,int z)186 unsigned int SetFilePointer(HANDLE file, int x, int y, int z)
187 {
188 	fprintf(stderr, "SetFilePointer(%d, %d, %d, %d)\n", file, x, y, z);
189 
190 	return 0;
191 }
192 
SetEndOfFile(HANDLE file)193 int SetEndOfFile(HANDLE file)
194 {
195 	fprintf(stderr, "SetEndOfFile(%d)\n", file);
196 
197 	return 0;
198 }
199 
200 /* time in miliseconds */
timeGetTime()201 unsigned int timeGetTime()
202 {
203 	static struct timeval tv0;
204 	struct timeval tv1;
205 	int secs, usecs;
206 
207 	if (tv0.tv_sec == 0) {
208 		gettimeofday(&tv0, NULL);
209 
210 		return 0;
211 	}
212 
213 	gettimeofday(&tv1, NULL);
214 
215 	secs = tv1.tv_sec - tv0.tv_sec;
216 	usecs = tv1.tv_usec - tv0.tv_usec;
217 	if (usecs < 0) {
218 		usecs += 1000000;
219 		secs--;
220 	}
221 
222 	return secs * 1000 + (usecs / 1000);
223 }
224 
GetTickCount()225 unsigned int GetTickCount()
226 {
227 	return timeGetTime();
228 }
229