annotate src/dmpack.c @ 1033:c353e6bcb733

Change handling of filename field in PACKs.
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 01 Mar 2015 16:39:46 +0200
parents a76056297006
children d674ddc0fc82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
1 /*
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
2 * DMLib
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
3 * -- PACK-file handling
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
4 * Programmed and designed by Matti 'ccr' Hamalainen
1013
1684bf6aa1f8 Bump copyright.
Matti Hamalainen <ccr@tnsp.org>
parents: 1012
diff changeset
5 * (C) Copyright 2011-2015 Tecnic Software productions (TNSP)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
6 */
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
7 #include "dmpack.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
8 #include "dmfile.h"
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
9
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
10
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
11 DMPackEntry *dmPackEntryNew()
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
12 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
13 return (DMPackEntry *) dmMalloc0(sizeof(DMPackEntry));
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
14 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
15
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
16
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
17 void dmPackEntryFree(DMPackEntry * node)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
19 dmFree(node);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
20 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
23 void dmPackEntryInsert(DMPackEntry ** packDir, DMPackEntry * node)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
24 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
25 if (*packDir != NULL)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
27 node->prev = (*packDir)->prev;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
28 (*packDir)->prev->next = node;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
29 (*packDir)->prev = node;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
30 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
31 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
32 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
33 *packDir = node->prev = node;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
34 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
35
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
36 node->next = NULL;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
37 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
38
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
39
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
40 void dmPackEntryDelete(DMPackEntry ** packDir, DMPackEntry * node)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
41 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
42 if (node->prev)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
43 node->prev->next = node->next;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
44
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
45 if (node->next)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
46 node->next->prev = node->prev;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
47 else
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
48 (*packDir)->prev = node->prev;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
49
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
50 node->prev = node->next = NULL;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
51 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
52
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
53
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
54 DMPackEntry *dmPackFind(DMPackEntry *list, const char *filename)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
55 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
56 DMPackEntry *node;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
57
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
58 for (node = list; node != NULL; node = node->next)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
59 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
60 if (strcmp(node->filename, filename) == 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
61 return node;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
62 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
63
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
64 return NULL;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
65 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
66
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
67
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
68 /*
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
69 * OPEN a packfile
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
70 */
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
71 int dmPackOpen(const char *filename, DMPackFile ** ppPack, BOOL readOnly)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
72 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
73 unsigned int i;
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
74 DMPackFile *pack = NULL;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
75 DMPackFileHeader hdr;
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
76 int ret = DMERR_OK;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
77
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
78 // Allocate packfile-structure
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
79 if ((pack = dmMalloc0(sizeof(DMPackFile))) == NULL)
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
80 {
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
81 ret = DMERR_MALLOC;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
82 goto out;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
83 }
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
84
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
85 // Open the file
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
86 if ((pack->file = fopen(filename, readOnly ? "rb" : "r+b")) == NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
87 {
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
88 ret = DMERR_FOPEN;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
89 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
91
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
92 pack->filename = dm_strdup(filename);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
93
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
94 // Read PACK header
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
95 fseek(pack->file, 0L, SEEK_SET);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
96 if (!dm_fread_str(pack->file, (Uint8 *) &hdr.ident, sizeof(hdr.ident)) ||
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
97 !dm_fread_le16(pack->file, &hdr.version) ||
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
98 !dm_fread_le32(pack->file, &hdr.dirEntries) ||
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
99 !dm_fread_le32(pack->file, &hdr.dirOffset))
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
100 {
1030
Matti Hamalainen <ccr@tnsp.org>
parents: 1013
diff changeset
101 ret = DMERR_FREAD;
Matti Hamalainen <ccr@tnsp.org>
parents: 1013
diff changeset
102 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
103 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
104
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
105 // Check information
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
106 if (memcmp(&hdr.ident, DPACK_IDENT, sizeof(hdr.ident)) != 0)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
107 {
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
108 ret = DMERR_NOTPACK;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
109 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
110 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
111
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
112 if (hdr.version != DPACK_VERSION)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
113 {
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
114 ret = DMERR_VERSION;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
115 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
116 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
117
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
118 // Read directory
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
119 if (hdr.dirOffset < sizeof(hdr) ||
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
120 fseek(pack->file, hdr.dirOffset, SEEK_SET) != 0)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
121 {
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
122 ret = DMERR_INVALID;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
123 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
124 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
125
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
126 for (i = 0; i < hdr.dirEntries; i++)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
127 {
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
128 // Allocate and read directory entry
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
129 DMPackEntry *entry;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
130
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
131 if ((entry = dmPackEntryNew()) == NULL)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
132 {
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
133 ret = DMERR_MALLOC;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
134 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
135 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
136
1033
c353e6bcb733 Change handling of filename field in PACKs.
Matti Hamalainen <ccr@tnsp.org>
parents: 1030
diff changeset
137 if (!dm_fread_str(pack->file, (Uint8 *) &entry->filename, DMRES_NAME_LEN) ||
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
138 !dm_fread_le32(pack->file, &entry->size) ||
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
139 !dm_fread_le32(pack->file, &entry->offset) ||
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
140 !dm_fread_le32(pack->file, &entry->length) ||
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
141 !dm_fread_le32(pack->file, &entry->flags))
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
142 {
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
143 ret = DMERR_FREAD;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
144 goto out;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
145 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146
1033
c353e6bcb733 Change handling of filename field in PACKs.
Matti Hamalainen <ccr@tnsp.org>
parents: 1030
diff changeset
147 // Ensure that the filename ends in NUL
c353e6bcb733 Change handling of filename field in PACKs.
Matti Hamalainen <ccr@tnsp.org>
parents: 1030
diff changeset
148 entry->filename[DMRES_NAME_LEN] = 0;
c353e6bcb733 Change handling of filename field in PACKs.
Matti Hamalainen <ccr@tnsp.org>
parents: 1030
diff changeset
149
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
150 // Validate
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
151 if (entry->size == 0 || entry->length == 0 ||
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
152 entry->length > hdr.dirOffset ||
1033
c353e6bcb733 Change handling of filename field in PACKs.
Matti Hamalainen <ccr@tnsp.org>
parents: 1030
diff changeset
153 entry->offset > hdr.dirOffset ||
c353e6bcb733 Change handling of filename field in PACKs.
Matti Hamalainen <ccr@tnsp.org>
parents: 1030
diff changeset
154 strlen(entry->filename) == 0)
1030
Matti Hamalainen <ccr@tnsp.org>
parents: 1013
diff changeset
155 {
Matti Hamalainen <ccr@tnsp.org>
parents: 1013
diff changeset
156 ret = DMERR_INVALID;
Matti Hamalainen <ccr@tnsp.org>
parents: 1013
diff changeset
157 goto out;
Matti Hamalainen <ccr@tnsp.org>
parents: 1013
diff changeset
158 }
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
159
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
160 // Insert into list
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
161 dmPackEntryInsert(&pack->entries, entry);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
162 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
163
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
164 out:
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
165 if (ret != DMERR_OK)
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
166 {
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
167 dmPackClose(pack);
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
168 pack = NULL;
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
169 }
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
170
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
171 *ppPack = pack;
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
172
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
173 return ret;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
174 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
175
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
176
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
177 /*
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
178 * CLOSE the packfile
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
179 */
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
180 int dmPackClose(DMPackFile * pack)
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
181 {
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
182 DMPackEntry *node;
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
183
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
184 if (pack == NULL)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
185 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
186
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
187 // Write the directory
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
188 node = pack->entries;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
189 while (node != NULL)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
190 {
721
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
191 DMPackEntry *next = node->next;
bb14d7907eb2 Rename many pack & resource handling functions.
Matti Hamalainen <ccr@tnsp.org>
parents: 0
diff changeset
192 dmPackEntryFree(node);
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
193 node = next;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
194 }
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
195
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
196 // Close the file
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
197 if (pack->file != NULL)
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
198 fclose(pack->file);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
199
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
200 // Free structures
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
201 dmFree(pack->filename);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
202
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
203 // Free packfile
1012
7666ba24e0c6 Cleanups and improve error handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 812
diff changeset
204 memset(pack, 0, sizeof(DMPackFile));
0
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
205 dmFree(pack);
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
206
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
207 return DMERR_OK;
32250b436bca Initial re-import.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
208 }