summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-reader/pdb.cpp
Side-by-side diff
Diffstat (limited to 'noncore/apps/opie-reader/pdb.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-reader/pdb.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/noncore/apps/opie-reader/pdb.cpp b/noncore/apps/opie-reader/pdb.cpp
index 68b904e..3054424 100644
--- a/noncore/apps/opie-reader/pdb.cpp
+++ b/noncore/apps/opie-reader/pdb.cpp
@@ -1,57 +1,63 @@
#include "pdb.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
size_t Cpdb::recordpos(int n)
{
UInt16 mxn = ntohs(head.recordList.numRecords);
if (n >= mxn)
{
return file_length;
}
else
{
size_t dataoffset = sizeof(DatabaseHdrType) - sizeof(UInt16);
dataoffset += /*dataoffset%4 + */ sizeof(RecordListType) * n;
fseek(fin, dataoffset, SEEK_SET);
RecordListType hdr;
fread(&hdr, 1, sizeof(hdr), fin);
return ntohl(hdr.nextRecordListID);
}
}
size_t Cpdb::recordlength(int n)
{
return recordpos(n+1)-recordpos(n);
}
void Cpdb::gotorecordnumber(int n)
{
fseek(fin, recordpos(n), SEEK_SET);
}
bool Cpdb::openfile(const char *src)
{
// printf("In openfile\n");
int ret = 0;
// printf("closing fin:%x\n",fin);
if (fin != NULL) fclose(fin);
// printf("opening fin\n");
fin = fopen(src,"rb");
if (fin==0)
{
return false;
}
// just holds the first few chars of the file
// char buf[0x100];
- fseek(fin,0,SEEK_END);
- file_length = ftell(fin);
+ struct stat buf;
+ stat(src, &buf);
+ file_length = buf.st_size;
+// fseek(fin,0,SEEK_END);
+// file_length = ftell(fin);
- fseek(fin,0,SEEK_SET);
+// fseek(fin,0,SEEK_SET);
fread(&head, 1, sizeof(head), fin);
return true;
}