my fixed file routines:
Code:
Code:
#define close_file(handle) Bfile_CloseFile_OS(handle)
typedef int file;
file make_file(char*name, int size) {
unsigned char*n = malloc(256*sizeof(unsigned short));
unsigned short*n2 = malloc(strlen(name)+7*sizeof(char));
*(sizeof(char)*7+strlen(name)+n+1) = 0x00;
memcpy(n, "\\\\fls0\\", 7*sizeof(char));
memcpy(sizeof(char)*7+n, name, strlen(name));
Bfile_StrToName_ncpy(n2, n, strlen((char*)n));
free(n);
name = (char*) n2;
free(n2);
Bfile_CreateEntry_OS(n2, 0x1, &size);
return Bfile_OpenFile_OS(n2, 0x3);
}
void*read_file(file handle, int size, int offset) {
static char*buf;
buf = malloc(size);
Bfile_ReadFile_OS(handle, buf, size, offset);
return buf;
}
void write_file(file handle, int size, int offset, void*data) {
char*buffer = malloc(size+offset);
memcpy(buffer, read_file(handle, offset, 0), offset);
memcpy(buffer+offset, data, size);
Bfile_WriteFile_OS(handle, buffer, size+offset);
free(buffer);
}
int file_exists(char*name) {
unsigned char*n = malloc(256*sizeof(unsigned short));
unsigned short*n2 = malloc(strlen(name)+7*sizeof(char));
*(sizeof(char)*7+strlen(name)+n+1) = 0x00;
memcpy(n, "\\\\fls0\\", 7*sizeof(char));
memcpy(sizeof(char)*7+n, name, strlen(name));
Bfile_StrToName_ncpy(n2, n, strlen((char*)n));
free(n);
name = (char*) n2;
free(n2);
file exists = Bfile_OpenFile_OS(n2, 0x3);
close_file(exists);
return (exists>=0);
}
int strlen(char*a) {
int c = 0;
while(*(a+c)) { c++; }
return c;
}