FireBirdLib - Topfield TMS PVR TAP Programming Library
HDD_InfBlockSet.c
Go to the documentation of this file.
1#include <string.h>
2#include <stdio.h>
3#include "FBLib_hdd.h"
4
5bool HDD_InfBlockSet(const char *RecPath, tinfBlock *infBlock)
6{
8
9 bool ret;
10 FILE *FileHandle;
11 tinfBlock TempinfBlock;
12 char AbsFileName[FBLIB_DIR_SIZE];
13 tstat64 statbuf;
14
15 if(!RecPath && !*RecPath)
16 {
17 TRACEEXIT();
18 return FALSE;
19 }
20
21 ret = FALSE;
22
23 ConvertPathType(RecPath, AbsFileName, PF_FullLinuxPath);
24 if(*AbsFileName && infBlock)
25 {
26 if(!StringEndsWith(AbsFileName, ".inf"))
27 {
28 strcat(AbsFileName, ".inf");
29
30 //Falls es keine .inf gibt, dann die eigentliche Datei nehmen
31 if(stat64(AbsFileName, &statbuf) != 0)
32 {
33 AbsFileName[strlen(AbsFileName) - 4] = '\0';
34 }
35 }
36
37 //Ein paar Daten updaten
38 memcpy(infBlock->Magic, INFBLOCKMAGIC, 4);
39 infBlock->Version = INFBLOCKVERSION;
40
41 FileHandle = fopen64(AbsFileName, "rb+");
42 if(FileHandle)
43 {
44 //Prüfen, ob es bereits einen infBlock gibt
45 fseeko64(FileHandle, -((__off64_t)sizeof(tinfBlock)), SEEK_END);
46 fread(&TempinfBlock, sizeof(tinfBlock), 1, FileHandle);
47 if((memcmp(TempinfBlock.Magic, INFBLOCKMAGIC, 4) == 0) && (TempinfBlock.Version == INFBLOCKVERSION))
48 {
49 //Ja, neu positionieren und überschreiben
50 fseeko64(FileHandle, -((__off64_t)sizeof(tinfBlock)), SEEK_END);
51 }
52 else
53 {
54 //Nein, am Ende anhängen
55 fseeko64(FileHandle, 0, SEEK_END);
56 }
57 fwrite(infBlock, sizeof(tinfBlock), 1, FileHandle);
58 fclose(FileHandle);
59 ret = TRUE;
60 }
61 }
62
63 TRACEEXIT();
64 return ret;
65}
void ConvertPathType(const char *Source, char *Dest, tPathFormat DestFormat)
struct __STDIO_FILE_STRUCT FILE
Definition: FBLib_hdd.h:137
int stat64(__const char *__restrict __file, tstat64 *__restrict __buf) __THROW
int fseeko64(FILE *__stream, __off64_t __off, int __whence)
FILE * fopen64(__const char *__restrict __filename, __const char *__restrict __modes)
bool HDD_InfBlockSet(const char *RecPath, tinfBlock *infBlock)
#define INFBLOCKVERSION
Definition: libFireBird.h:1930
#define FBLIB_DIR_SIZE
Definition: libFireBird.h:1871
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define TRACEENTER()
Definition: libFireBird.h:1243
bool StringEndsWith(const char *text, const char *postfix)
Definition: StringEndsWith.c:4
#define SEEK_END
Definition: libFireBird.h:1883
@ PF_FullLinuxPath
Definition: libFireBird.h:1926
#define INFBLOCKMAGIC
Definition: libFireBird.h:1929
char Magic[4]
Definition: libFireBird.h:1934
byte Version
Definition: libFireBird.h:1935