FireBirdLib - Topfield TMS PVR TAP Programming Library
StringDBAdd.c
Go to the documentation of this file.
1#include <stdlib.h>
2#include <string.h>
3#include "libFireBird.h"
4
5dword StringDBAdd(tStringDB *StringDB, char *Text)
6{
8
9 char *p;
10 dword ret;
11
12 if(!StringDB || !Text)
13 {
14 TRACEEXIT();
15 return 0;
16 }
17
18 p = StringDB->DB;
19 while(p < StringDB->DBEnd)
20 {
21 if(!strcmp(p, Text))
22 {
23 ret = (dword)p - (dword)StringDB->DB;
24
25 TRACEEXIT();
26 return ret;
27 }
28
29 p += (strlen(p) + 1);
30 }
31
32 if(((StringDB->DBEnd - StringDB->DB) + strlen(Text) + 2) > StringDB->DBSize)
33 {
34 int NewStringDBSize;
35 char *NewStringDB;
36
37 if(StringDB->DBSize == 0)
38 NewStringDBSize = 2 * strlen(Text);
39 else
40 NewStringDBSize = StringDB->DBSize + 4096;
41
42 NewStringDB = TAP_MemAlloc(NewStringDBSize);
43 if(!NewStringDB)
44 {
45 TRACEEXIT();
46 return 0;
47 }
48
49 memset(NewStringDB, 0, NewStringDBSize);
50 memcpy(NewStringDB, StringDB->DB, StringDB->DBSize);
51 TAP_MemFree(StringDB->DB);
52
53 StringDB->DBPtr = StringDB->DBPtr - StringDB->DB + NewStringDB;
54 StringDB->DBEnd = StringDB->DBEnd - StringDB->DB + NewStringDB;
55
56 StringDB->DB = NewStringDB;
57 StringDB->DBSize = NewStringDBSize;
58 }
59 p = StringDB->DBEnd;
60 strcpy(StringDB->DBEnd, Text);
61 StringDB->DBEnd = StringDB->DBEnd + strlen(Text) + 1;
62 ret = (dword)p - (dword)StringDB->DB;
63
64 TRACEEXIT();
65 return ret;
66}
dword StringDBAdd(tStringDB *StringDB, char *Text)
Definition: StringDBAdd.c:5
#define TRACEEXIT()
Definition: libFireBird.h:1244
#define TRACEENTER()
Definition: libFireBird.h:1243
dword DBSize
Definition: libFireBird.h:2548
char * DB
Definition: libFireBird.h:2549
char * DBEnd
Definition: libFireBird.h:2551
char * DBPtr
Definition: libFireBird.h:2550