summaryrefslogtreecommitdiffabout
path: root/gammu/emb/common/service/backup/backvcf.c
Unidiff
Diffstat (limited to 'gammu/emb/common/service/backup/backvcf.c') (more/less context) (ignore whitespace changes)
-rw-r--r--gammu/emb/common/service/backup/backvcf.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/gammu/emb/common/service/backup/backvcf.c b/gammu/emb/common/service/backup/backvcf.c
new file mode 100644
index 0000000..761a81b
--- a/dev/null
+++ b/gammu/emb/common/service/backup/backvcf.c
@@ -0,0 +1,75 @@
1/* (c) 2003 by Marcin Wiacek */
2
3#include <string.h>
4#include <ctype.h>
5
6#include "../../phone/nokia/nfunc.h"
7#include "../../phone/nokia/dct3/n7110.h"
8#include "../../misc/coding/coding.h"
9#include "../gsmlogo.h"
10#include "../gsmmisc.h"
11#include "backvcf.h"
12
13#ifdef GSM_ENABLE_BACKUP
14
15GSM_Error SaveVCard(char *FileName, GSM_Backup *backup)
16{
17 int i, Length = 0;
18 unsigned char Buffer[1000];
19 FILE *file;
20
21 file = fopen(FileName, "wb");
22 if (file == NULL) return ERR_CANTOPENFILE;
23
24 i=0;
25 while (backup->PhonePhonebook[i]!=NULL) {
26 sprintf(Buffer, "%c%c",13,10);
27 fwrite(Buffer,1,2,file);
28 Length = 0;
29 GSM_EncodeVCARD(Buffer,&Length,backup->PhonePhonebook[i],true,Nokia_VCard21);
30 fwrite(Buffer,1,Length,file);
31 i++;
32 }
33
34 fclose(file);
35 return ERR_NONE;
36}
37
38GSM_Error LoadVCard(char *FileName, GSM_Backup *backup)
39{
40 GSM_File File;
41 GSM_Error error;
42 GSM_MemoryEntry Pbk;
43 int numPbk = 0, Pos;
44
45 File.Buffer = NULL;
46 error = GSM_ReadFile(FileName, &File);
47 if (error != ERR_NONE) return error;
48
49 Pos = 0;
50 while (1) {
51 error = GSM_DecodeVCARD(File.Buffer, &Pos, &Pbk, Nokia_VCard21);
52 if (error == ERR_EMPTY) break;
53 if (error != ERR_NONE) return error;
54 if (numPbk < GSM_BACKUP_MAX_PHONEPHONEBOOK) {
55 backup->PhonePhonebook[numPbk] = malloc(sizeof(GSM_MemoryEntry));
56 if (backup->PhonePhonebook[numPbk] == NULL) return ERR_MOREMEMORY;
57 backup->PhonePhonebook[numPbk + 1] = NULL;
58 } else {
59 dbgprintf("Increase GSM_BACKUP_MAX_PHONEPHONEBOOK\n");
60 return ERR_MOREMEMORY;
61 }
62 memcpy(backup->PhonePhonebook[numPbk],&Pbk,sizeof(GSM_MemoryEntry));
63 backup->PhonePhonebook[numPbk]->Location = numPbk + 1;
64 backup->PhonePhonebook[numPbk]->MemoryType = MEM_ME;
65 numPbk++;
66 }
67
68 return ERR_NONE;
69}
70
71#endif
72
73/* How should editor hadle tabs in this file? Add editor commands here.
74 * vim: noexpandtab sw=8 ts=8 sts=8:
75 */