51 #include "../../version/ver_fat_sl.h"
52 #if VER_FAT_SL_MAJOR != 5 || VER_FAT_SL_MINOR != 2
53 #error Incompatible FAT_SL version number!
56 static unsigned char _f_stepnextsector (
void );
128 static unsigned char _f_stepnextsector (
void )
131 unsigned char b_alloc;
165 unsigned long nextcluster;
208 static unsigned char _f_extend (
long size )
214 _size = (
unsigned long)size;
218 if ( _f_stepnextsector() )
248 if ( _f_stepnextsector() )
262 if ( _f_stepnextsector() )
303 static unsigned char _f_fseek (
long offset )
305 unsigned long cluster;
345 while ( (
unsigned long)offset >= tmp )
354 if ( (
long) tmp >= remain )
371 if ( remain && offset )
374 && ( remain > (
long) F_SECTOR_SIZE ) )
383 if ( remain < offset )
395 ret = _f_extend( offset );
431 if ( mode[0] ==
'r' )
436 if ( mode[0] ==
'w' )
441 if ( mode[0] ==
'a' )
447 if ( ( mode[1] ==
'+' ) && ( mode[2] == 0 ) )
449 if ( mode[0] ==
'r' )
454 if ( mode[0] ==
'w' )
459 if ( mode[0] ==
'a' )
530 #if F_FILE_CHANGED_EVENT
581 #if F_FILE_CHANGED_EVENT
639 #if F_FILE_CHANGED_EVENT
659 static unsigned char _f_updatefileentry (
int remove )
708 #if F_FILE_CHANGED_EVENT
735 #if F_FILE_CHANGED_EVENT
744 (void)_f_updatefileentry( 1 );
749 ret = _f_updatefileentry( 0 );
751 #if F_FILE_CHANGED_EVENT
752 if ( f_filechangedevent && !ret )
757 fc.action = FACTION_ADDED;
758 fc.flags = FFLAGS_FILE_NAME;
762 fc.action = FACTION_MODIFIED;
763 fc.flags = FFLAGS_FILE_NAME | FFLAGS_SIZE;
766 strcpy( fc.filename, f->filename );
767 if ( f->filename[0] )
769 f_filechangedevent( &fc );
772 f->filename[0] =
'\0';
821 (void)_f_updatefileentry( 1 );
826 return _f_updatefileentry( 0 );
853 char * buffer = (
char *)buf;
894 unsigned long rdsize = (
unsigned long)size;
946 return retsize / _size_st;
971 char * buffer = (
char *)buf;
1011 if ( _f_stepnextsector() )
1028 unsigned long wrsize = (
unsigned long)size;
1037 if ( _f_updatefileentry( 0 ) == 0 )
1050 if ( _f_stepnextsector() )
1053 if ( _f_updatefileentry( 0 ) == 0 )
1105 return retsize / _size_st;
1160 return _f_fseek( offset );
1278 unsigned char tmpch = (
unsigned char)ch;
1280 if (
fn_write( &tmpch, 1, 1, filehandle ) )
1311 if ( !
fn_read( &ch, 1, 1, filehandle ) )
1389 de->
name[0] = (
unsigned char)0xe5;
1398 #if F_FILE_CHANGED_EVENT
1399 if ( f_filechangedevent && !ret )
1402 fc.action = FACTION_REMOVED;
1403 fc.flags = FFLAGS_FILE_NAME;
1407 f_filechangedevent( &fc );
1442 rc = _f_fseek( filesize );
1445 unsigned long cluster;
1476 rc = _f_fseek( filesize );
unsigned char _f_removechain(unsigned long cluster)
long fn_filelength(const char *filename)
int fn_putc(int ch, F_FILE *filehandle)
unsigned char fn_eof(F_FILE *f)
unsigned char _f_writefatsector(void)
unsigned long _f_getdecluster(F_DIRENTRY *de)
void _f_setlong(void *, unsigned long)
unsigned char name[F_MAXNAME]
void f_igettimedate(unsigned short *time, unsigned short *date)
unsigned char fn_delete(const char *filename)
unsigned long startcluster
#define psp_memcpy(d, s, l)
unsigned char filesize[4]
unsigned char _f_getvolume(void)
unsigned char sector_per_cluster
unsigned char _f_checknamewc(const char *, const char *)
unsigned char _f_alloccluster(unsigned long *pcluster)
void _f_clustertopos(unsigned long cluster, F_POS *pos)
unsigned long _f_getlong(void *)
unsigned char fn_seek(F_FILE *f, long offset, unsigned char whence)
unsigned char _f_getcurrsector(void)
unsigned char fn_close(F_FILE *f)
unsigned char _f_findpath(F_NAME *fsname, F_POS *pos)
unsigned char _f_seteof(F_FILE *f, long filesize)
unsigned char _f_writeglsector(unsigned long sector)
long fn_write(const void *buf, long size, long _size_st, F_FILE *f)
unsigned char lastaccessdate[2]
unsigned char _f_findfilewc(char *name, char *ext, F_POS *pos, F_DIRENTRY **pde, unsigned char wc)
void _f_setdecluster(F_DIRENTRY *de, unsigned long cluster)
void _f_setword(void *, unsigned short)
#define psp_memset(d, c, l)
unsigned char fn_flush(F_FILE *f)
unsigned char _f_setfsname(const char *, F_NAME *)
long fn_read(void *buf, long size, long _size_st, F_FILE *f)
unsigned char fn_rewind(F_FILE *filehandle)
unsigned char clusterhi[2]
int _f_createfullname(char *buffer, int buffersize, char *path, char *filename, char *fileext)
unsigned char _f_readglsector(unsigned long sector)
char gl_sector[F_SECTOR_SIZE]
unsigned char _f_addentry(F_NAME *fsname, F_POS *pos, F_DIRENTRY **pde)
#define F_CLUSTER_RESERVED
unsigned char _f_getclustervalue(unsigned long cluster, unsigned long *pvalue)
F_FILE * fn_truncate(const char *filename, long filesize)
F_FILE * fn_open(const char *filename, const char *mode)
int fn_getc(F_FILE *filehandle)
unsigned char clusterlo[2]
unsigned char fn_seteof(F_FILE *f)
unsigned char _f_setclustervalue(unsigned long cluster, unsigned long _tdata)