FireBirdLib - Topfield TMS PVR TAP Programming Library
infData_Delete.c
Go to the documentation of this file.
1
#include <stdio.h>
2
#include "
FBLib_rec.h
"
3
4
extern
FILE
*
infDatainfFile
;
5
6
bool
infData_Delete
(
const
char
*infFileName,
const
char
*NameTag)
7
{
8
bool
ret;
9
dword SourcePos, DestPos, Len;
10
tTFRPlusHdr
TFRPlusHdr;
11
char
NameTagHdr[512];
12
byte
*Data;
13
14
TRACEENTER
();
15
16
ret = FALSE;
17
18
if
(NameTag && *NameTag &&
infData_OpenFile
(infFileName) &&
infData_LocateSig
(NameTag, NULL))
19
{
20
ret = TRUE;
21
22
//Now the file pointer is located at the beginning of the data block
23
//which should be deleted.
24
DestPos = ftell(
infDatainfFile
);
25
fread(&TFRPlusHdr,
sizeof
(
tTFRPlusHdr
), 1,
infDatainfFile
);
26
Len =
sizeof
(
tTFRPlusHdr
) + TFRPlusHdr.
NameTagLen
+ TFRPlusHdr.
PayloadSize
;
27
SourcePos = DestPos + Len;
28
fseek(
infDatainfFile
, SourcePos,
SEEK_SET
);
29
30
while
(SourcePos <
infData_Flen
())
31
{
32
//Stop if we're unable to read the whole header
33
if
(fread(&TFRPlusHdr,
sizeof
(
tTFRPlusHdr
), 1,
infDatainfFile
) == 0)
break
;
34
35
//Stop parsing if the magic is invalid
36
if
(memcmp(TFRPlusHdr.
Magic
,
INFDATMAGIC
, 4) != 0)
break
;
37
38
Len =
sizeof
(
tTFRPlusHdr
) + TFRPlusHdr.
NameTagLen
+ TFRPlusHdr.
PayloadSize
;
39
40
fread(NameTagHdr, TFRPlusHdr.
NameTagLen
, 1,
infDatainfFile
);
41
42
if
(TFRPlusHdr.
PayloadSize
)
43
{
44
Data = TAP_MemAlloc(TFRPlusHdr.
PayloadSize
);
45
if
(Data)
46
{
47
fread(Data, TFRPlusHdr.
PayloadSize
, 1,
infDatainfFile
);
48
}
49
else
50
{
51
LogEntryFBLibPrintf
(TRUE,
"infData: failed to reserve %lu bytes for deletion of %s:%s"
, TFRPlusHdr.
PayloadSize
, infFileName, NameTagHdr);
52
TFRPlusHdr.
PayloadSize
= 0;
53
}
54
}
55
else
56
Data = NULL;
57
58
fseek(
infDatainfFile
, DestPos,
SEEK_SET
);
59
fwrite(&TFRPlusHdr,
sizeof
(
tTFRPlusHdr
), 1,
infDatainfFile
);
60
fwrite(NameTagHdr, TFRPlusHdr.
NameTagLen
, 1,
infDatainfFile
);
61
62
if
(Data)
63
{
64
fwrite(Data, TFRPlusHdr.
PayloadSize
, 1,
infDatainfFile
);
65
TAP_MemFree(Data);
66
}
67
68
DestPos += Len;
69
SourcePos += Len;
70
71
fseek(
infDatainfFile
, SourcePos,
SEEK_SET
);
72
}
73
infData_Truncate
(infFileName, DestPos);
74
}
75
76
infData_CloseFile
();
77
78
TRACEEXIT
();
79
return
ret;
80
}
FILE
struct __STDIO_FILE_STRUCT FILE
Definition:
FBLib_hdd.h:137
FBLib_rec.h
INFDATMAGIC
#define INFDATMAGIC
Definition:
FBLib_rec.h:18
infData_Truncate
void infData_Truncate(const char *infFileName, dword Position)
Definition:
infData_Truncate.c:4
infData_LocateSig
bool infData_LocateSig(const char *NameTag, dword *PayloadSize)
Definition:
infData_LocateSig.c:7
infData_OpenFile
bool infData_OpenFile(const char *infFileName)
Definition:
infData_OpenFile.c:6
infData_CloseFile
void infData_CloseFile(void)
Definition:
infData_CloseFile.c:6
infData_Flen
dword infData_Flen(void)
Definition:
infData_Flen.c:6
LogEntryFBLibPrintf
void LogEntryFBLibPrintf(bool Console, char *format,...)
Definition:
LogEntryFBLibPrintf.c:13
infDatainfFile
FILE * infDatainfFile
Definition:
infData_OpenFile.c:4
infData_Delete
bool infData_Delete(const char *infFileName, const char *NameTag)
Definition:
infData_Delete.c:6
SEEK_SET
#define SEEK_SET
Definition:
libFireBird.h:1875
TRACEEXIT
#define TRACEEXIT()
Definition:
libFireBird.h:1244
TRACEENTER
#define TRACEENTER()
Definition:
libFireBird.h:1243
tTFRPlusHdr
Definition:
FBLib_rec.h:21
tTFRPlusHdr::NameTagLen
dword NameTagLen
Definition:
FBLib_rec.h:23
tTFRPlusHdr::Magic
char Magic[4]
Definition:
FBLib_rec.h:22
tTFRPlusHdr::PayloadSize
dword PayloadSize
Definition:
FBLib_rec.h:24
rec
infData_Delete.c
Generated on Fri Apr 29 2022 13:34:01 for FireBirdLib - Topfield TMS PVR TAP Programming Library by
1.9.3