iostd.c

Go to the documentation of this file.

#include "iostd.h"

BOOL IoStdIsValid(LPVOID h){
 return !!(h);
}

LPVOID IoStdOpenFile(LPCTSTR fname, BOOL read){
 if(read==FILE_READ){
  return fopen((const char*)fname,"rb");
 } else if(read==FILE_WRITE){
  return fopen((const char*)fname,"wb");
 } else if(read==FILE_APPEND){
  FILE *f=fopen((const char*)fname,"r+b");
  if(!f){
   f=fopen((const char*)fname,"wb");
  }
  return f;
 } else if(read==FILE_READWRITE){
  FILE *f=fopen((const char*)fname,"r+b");
  fseek(f,0,SEEK_SET);
  return f;
 }
 return NULL;
}

DWORD IoStdReadFile(LPVOID h, LPVOID p, DWORD sz){
 FILE *f=(FILE*)h;
 DWORD ret;
 BOOL e;
 e=feof(f);
 if(e||sz==0){
  return 0;
 } else {
  LONG oldtell=ftell(f);
  fread(p,sz,1,f);
  return ftell(f)-oldtell;
 }
}

BOOL IoStdWriteFile(LPVOID h, LPVOID p, DWORD sz){
 FILE *f=(FILE*)h;
 DWORD ret;
 if(sz==0){
  return 0;
 } else {
  LONG oldtell=ftell(f);
  fwrite(p,sz,1,f);
  return ftell(f)-oldtell;
 }
}


BOOL IoStdFlushFile(LPVOID h, LPVOID p, DWORD sz){
 FILE *f=(FILE*)h;
 return fflush(f)>=0;
}

BOOL IoStdCloseFile(LPVOID h){
 FILE *f=(FILE*)h;
 fclose(f);
 return !!(f);
}

LONG IoStdSeekFile(LPVOID h, LONG lo, DWORD mode){
 FILE *f=(FILE*)h;
 switch(mode){
  case FILE_BEGIN:
   fseek(f,lo,SEEK_SET);
   return ftell(f);
  case FILE_CURRENT:
   if(lo){
    fseek(f,lo,SEEK_CUR);
   }
   return ftell(f);
  case FILE_END:
   fseek(f,lo,SEEK_END);
   return ftell(f);
  default:
   return 0;
 }
}

DWORD IoStdGetSize(LPVOID h){
 FILE *f=(FILE*)h;
 LONG tmp;
 LONG sz;
 tmp=ftell(f);
 fseek(f,0,SEEK_END);
 sz=ftell(f);
 fseek(f,tmp,SEEK_SET);
 return (DWORD)sz;
}

/*

LONGLONG IoStdSeekFile64(LPVOID handle, LONGLONG pos, int seek){
 rewind(inst->handle);
 while (pos){
  if (fseek((FILE*)handle, (long) (pos & 0x7FFFFFFF), SEEK_CUR) == -1)
            return false;
        pos -= (pos & 0x7FFFFFFF);
    } // while
    return true;
}

LONGLONG IoStdGetSize64(LPVOID handle){
 return (LONGLONG)IoStdGetSize(handle);
}


*/

IOSTRUCT StdIo={
 IoStdIsValid,
 IoStdOpenFile,
 IoStdCloseFile,
 IoStdReadFile,
 IoStdWriteFile,
 IoStdSeekFile,
 IoStdGetSize,
 IoStdFlushFile
};

IOSTRUCT *GetNativeIo(void){
 return &StdIo;
}

Generated on Thu Mar 27 01:46:53 2008 for Item Arrays by  doxygen 1.4.6-NO