FireBirdLib - Topfield TMS PVR TAP Programming Library
infData_LocateSig.c
Go to the documentation of this file.
1#include <stdio.h>
2#include <string.h>
3#include "FBLib_rec.h"
4
5extern FILE *infDatainfFile;
6
7bool infData_LocateSig(const char *NameTag, dword *PayloadSize)
8{
9 bool ret;
10 tTFRPlusHdr TFRPlusHdr;
11 char NameTagHdr[256];
12 dword CurrentPos;
13
14 //Format
15 // char Magic[4] //TFr+
16 // dword PayloadSize
17 // word NameTagLength //includes the NULL character
18 // char NameTag[SigLength]
19 // byte Payload[PayloadSize]
20
21 TRACEENTER();
22
23 ret = FALSE;
24 if(PayloadSize) *PayloadSize = 0;
25
26 if(NameTag && *NameTag && infDatainfFile && (infData_Flen() > INFDATASTART))
27 {
29
30 while((CurrentPos = ftell(infDatainfFile)) < infData_Flen())
31 {
32 fread(&TFRPlusHdr, sizeof(tTFRPlusHdr), 1, infDatainfFile);
33
34 //Stop parsing if the magic is invalid
35 if(memcmp(TFRPlusHdr.Magic, INFDATMAGIC, 4) != 0) break;
36
37 fread(NameTagHdr, TFRPlusHdr.NameTagLen, 1, infDatainfFile);
38
39 if(strcmp(NameTag, NameTagHdr) == 0)
40 {
41 ret = TRUE;
42 if(PayloadSize) *PayloadSize = TFRPlusHdr.PayloadSize;
43 fseek(infDatainfFile, CurrentPos, SEEK_SET);
44 break;
45 }
46 fseek(infDatainfFile, TFRPlusHdr.PayloadSize, SEEK_CUR);
47 }
48 }
49
50 TRACEEXIT();
51 return ret;
52}
struct __STDIO_FILE_STRUCT FILE
Definition: FBLib_hdd.h:137
#define INFDATMAGIC
Definition: FBLib_rec.h:18
dword infData_Flen(void)
Definition: infData_Flen.c:6
#define INFDATASTART
Definition: FBLib_rec.h:15
bool infData_LocateSig(const char *NameTag, dword *PayloadSize)
FILE * infDatainfFile
#define SEEK_SET
Definition: libFireBird.h:1875
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define SEEK_CUR
Definition: libFireBird.h:1879
#define TRACEENTER()
Definition: libFireBird.h:1243
dword NameTagLen
Definition: FBLib_rec.h:23
char Magic[4]
Definition: FBLib_rec.h:22
dword PayloadSize
Definition: FBLib_rec.h:24