#include #include #include "sys/stat.h" #include "sys/time.h" #include "nds.h" #include "main.h" #include "app.h" #include "prefs.h" #include "book.h" #define PARSEBUFSIZE 1024*64 Prefs::Prefs() { Init(); } Prefs::Prefs(App *parent) { Init(); app = parent; } Prefs::~Prefs() {} //! \return 0: success, 255: file open failure, 254: no bytes read, 253: parse failure. int Prefs::Read() { int err = 0; parsedata_t pdata; app->parse_init(&pdata); pdata.prefs = this; FILE *fp = fopen(PREFSPATH,"r"); if (!fp) { err = 255; return err; } XML_Parser p = XML_ParserCreate(NULL); if(!p) { fclose(fp); err = 254; return err; } XML_SetUnknownEncodingHandler(p,unknown_hndl,NULL); XML_SetStartElementHandler(p, prefs_start_hndl); XML_SetEndElementHandler(p, prefs_end_hndl); XML_SetUserData(p, (void *)&pdata); while (true) { void *buff = XML_GetBuffer(p, PARSEBUFSIZE); int bytes_read = fread(buff, sizeof(char), PARSEBUFSIZE, fp); if(bytes_read < 0) { err = 254; break; } enum XML_Status status = XML_ParseBuffer(p, bytes_read, bytes_read == 0); if(status == XML_STATUS_ERROR) { app->parse_error(p); err = 253; break; } if (bytes_read == 0) break; } XML_ParserFree(p); fclose(fp); return err; struct stat st; stat(PREFSPATH,&st); struct timeval time; gettimeofday(&time,NULL); char msg[64]; sprintf(msg,"info : file timestamp %lld",st.st_mtime); app->Log(msg); sprintf(msg,"info : current time %lld",time.tv_sec); app->Log(msg); } //! \return Error code, 0: success. int Prefs::Write() { int err = 0; FILE* fp = fopen(PREFSPATH,"w"); if(!fp) return 255; fprintf(fp, "\n"); if(swapshoulder) fprintf(fp, "\n"); fprintf(fp, "\n"); fclose(fp); return err; } void Prefs::Init(){ modtime = 0; // fill this in with gettimeofday() swapshoulder = FALSE; }