comparison src/xs_slsup.c @ 660:b0743dc9165d

Change tabs to 4 spaces, everywhere.
author Matti Hamalainen <ccr@tnsp.org>
date Wed, 02 Apr 2008 22:10:05 +0300
parents acaba070cf49
children 9321ffa2ea7e
comparison
equal deleted inserted replaced
659:04ea91a61225 660:b0743dc9165d
33 33
34 /* STIL-database handling 34 /* STIL-database handling
35 */ 35 */
36 gint xs_stil_init(void) 36 gint xs_stil_init(void)
37 { 37 {
38 XS_MUTEX_LOCK(xs_cfg); 38 XS_MUTEX_LOCK(xs_cfg);
39 39
40 if (!xs_cfg.stilDBPath) { 40 if (!xs_cfg.stilDBPath) {
41 XS_MUTEX_UNLOCK(xs_cfg); 41 XS_MUTEX_UNLOCK(xs_cfg);
42 return -1; 42 return -1;
43 } 43 }
44 44
45 XS_MUTEX_LOCK(xs_stildb_db); 45 XS_MUTEX_LOCK(xs_stildb_db);
46 46
47 /* Check if already initialized */ 47 /* Check if already initialized */
48 if (xs_stildb_db) 48 if (xs_stildb_db)
49 xs_stildb_free(xs_stildb_db); 49 xs_stildb_free(xs_stildb_db);
50 50
51 /* Allocate database */ 51 /* Allocate database */
52 xs_stildb_db = (xs_stildb_t *) g_malloc0(sizeof(xs_stildb_t)); 52 xs_stildb_db = (xs_stildb_t *) g_malloc0(sizeof(xs_stildb_t));
53 if (!xs_stildb_db) { 53 if (!xs_stildb_db) {
54 XS_MUTEX_UNLOCK(xs_cfg); 54 XS_MUTEX_UNLOCK(xs_cfg);
55 XS_MUTEX_UNLOCK(xs_stildb_db); 55 XS_MUTEX_UNLOCK(xs_stildb_db);
56 return -2; 56 return -2;
57 } 57 }
58 58
59 /* Read the database */ 59 /* Read the database */
60 if (xs_stildb_read(xs_stildb_db, xs_cfg.stilDBPath) != 0) { 60 if (xs_stildb_read(xs_stildb_db, xs_cfg.stilDBPath) != 0) {
61 xs_stildb_free(xs_stildb_db); 61 xs_stildb_free(xs_stildb_db);
62 xs_stildb_db = NULL; 62 xs_stildb_db = NULL;
63 XS_MUTEX_UNLOCK(xs_cfg); 63 XS_MUTEX_UNLOCK(xs_cfg);
64 XS_MUTEX_UNLOCK(xs_stildb_db); 64 XS_MUTEX_UNLOCK(xs_stildb_db);
65 return -3; 65 return -3;
66 } 66 }
67 67
68 /* Create index */ 68 /* Create index */
69 if (xs_stildb_index(xs_stildb_db) != 0) { 69 if (xs_stildb_index(xs_stildb_db) != 0) {
70 xs_stildb_free(xs_stildb_db); 70 xs_stildb_free(xs_stildb_db);
71 xs_stildb_db = NULL; 71 xs_stildb_db = NULL;
72 XS_MUTEX_UNLOCK(xs_cfg); 72 XS_MUTEX_UNLOCK(xs_cfg);
73 XS_MUTEX_UNLOCK(xs_stildb_db); 73 XS_MUTEX_UNLOCK(xs_stildb_db);
74 return -4; 74 return -4;
75 } 75 }
76 76
77 XS_MUTEX_UNLOCK(xs_cfg); 77 XS_MUTEX_UNLOCK(xs_cfg);
78 XS_MUTEX_UNLOCK(xs_stildb_db); 78 XS_MUTEX_UNLOCK(xs_stildb_db);
79 return 0; 79 return 0;
80 } 80 }
81 81
82 82
83 void xs_stil_close(void) 83 void xs_stil_close(void)
84 { 84 {
85 XS_MUTEX_LOCK(xs_stildb_db); 85 XS_MUTEX_LOCK(xs_stildb_db);
86 xs_stildb_free(xs_stildb_db); 86 xs_stildb_free(xs_stildb_db);
87 xs_stildb_db = NULL; 87 xs_stildb_db = NULL;
88 XS_MUTEX_UNLOCK(xs_stildb_db); 88 XS_MUTEX_UNLOCK(xs_stildb_db);
89 } 89 }
90 90
91 91
92 stil_node_t *xs_stil_get(gchar *filename) 92 stil_node_t *xs_stil_get(gchar *filename)
93 { 93 {
94 stil_node_t *result; 94 stil_node_t *result;
95 gchar *tmpFilename; 95 gchar *tmpFilename;
96 96
97 XS_MUTEX_LOCK(xs_stildb_db); 97 XS_MUTEX_LOCK(xs_stildb_db);
98 XS_MUTEX_LOCK(xs_cfg); 98 XS_MUTEX_LOCK(xs_cfg);
99 99
100 if (xs_cfg.stilDBEnable && xs_stildb_db) { 100 if (xs_cfg.stilDBEnable && xs_stildb_db) {
101 if (xs_cfg.hvscPath) { 101 if (xs_cfg.hvscPath) {
102 /* Remove postfixed directory separator from HVSC-path */ 102 /* Remove postfixed directory separator from HVSC-path */
103 tmpFilename = xs_strrchr(xs_cfg.hvscPath, '/'); 103 tmpFilename = xs_strrchr(xs_cfg.hvscPath, '/');
104 if (tmpFilename && (tmpFilename[1] == 0)) 104 if (tmpFilename && (tmpFilename[1] == 0))
105 tmpFilename[0] = 0; 105 tmpFilename[0] = 0;
106 106
107 /* Remove HVSC location-prefix from filename */ 107 /* Remove HVSC location-prefix from filename */
108 tmpFilename = strstr(filename, xs_cfg.hvscPath); 108 tmpFilename = strstr(filename, xs_cfg.hvscPath);
109 if (tmpFilename) 109 if (tmpFilename)
110 tmpFilename += strlen(xs_cfg.hvscPath); 110 tmpFilename += strlen(xs_cfg.hvscPath);
111 else 111 else
112 tmpFilename = filename; 112 tmpFilename = filename;
113 } else 113 } else
114 tmpFilename = filename; 114 tmpFilename = filename;
115 115
116 result = xs_stildb_get_node(xs_stildb_db, tmpFilename); 116 result = xs_stildb_get_node(xs_stildb_db, tmpFilename);
117 } else 117 } else
118 result = NULL; 118 result = NULL;
119 119
120 XS_MUTEX_UNLOCK(xs_stildb_db); 120 XS_MUTEX_UNLOCK(xs_stildb_db);
121 XS_MUTEX_UNLOCK(xs_cfg); 121 XS_MUTEX_UNLOCK(xs_cfg);
122 122
123 return result; 123 return result;
124 } 124 }
125 125
126 126
127 /* Song length database handling glue 127 /* Song length database handling glue
128 */ 128 */
129 gint xs_songlen_init(void) 129 gint xs_songlen_init(void)
130 { 130 {
131 XS_MUTEX_LOCK(xs_cfg); 131 XS_MUTEX_LOCK(xs_cfg);
132 132
133 if (!xs_cfg.songlenDBPath) { 133 if (!xs_cfg.songlenDBPath) {
134 XS_MUTEX_UNLOCK(xs_cfg); 134 XS_MUTEX_UNLOCK(xs_cfg);
135 return -1; 135 return -1;
136 } 136 }
137 137
138 XS_MUTEX_LOCK(xs_sldb_db); 138 XS_MUTEX_LOCK(xs_sldb_db);
139 139
140 /* Check if already initialized */ 140 /* Check if already initialized */
141 if (xs_sldb_db) 141 if (xs_sldb_db)
142 xs_sldb_free(xs_sldb_db); 142 xs_sldb_free(xs_sldb_db);
143 143
144 /* Allocate database */ 144 /* Allocate database */
145 xs_sldb_db = (xs_sldb_t *) g_malloc0(sizeof(xs_sldb_t)); 145 xs_sldb_db = (xs_sldb_t *) g_malloc0(sizeof(xs_sldb_t));
146 if (!xs_sldb_db) { 146 if (!xs_sldb_db) {
147 XS_MUTEX_UNLOCK(xs_cfg); 147 XS_MUTEX_UNLOCK(xs_cfg);
148 XS_MUTEX_UNLOCK(xs_sldb_db); 148 XS_MUTEX_UNLOCK(xs_sldb_db);
149 return -2; 149 return -2;
150 } 150 }
151 151
152 /* Read the database */ 152 /* Read the database */
153 if (xs_sldb_read(xs_sldb_db, xs_cfg.songlenDBPath) != 0) { 153 if (xs_sldb_read(xs_sldb_db, xs_cfg.songlenDBPath) != 0) {
154 xs_sldb_free(xs_sldb_db); 154 xs_sldb_free(xs_sldb_db);
155 xs_sldb_db = NULL; 155 xs_sldb_db = NULL;
156 XS_MUTEX_UNLOCK(xs_cfg); 156 XS_MUTEX_UNLOCK(xs_cfg);
157 XS_MUTEX_UNLOCK(xs_sldb_db); 157 XS_MUTEX_UNLOCK(xs_sldb_db);
158 return -3; 158 return -3;
159 } 159 }
160 160
161 /* Create index */ 161 /* Create index */
162 if (xs_sldb_index(xs_sldb_db) != 0) { 162 if (xs_sldb_index(xs_sldb_db) != 0) {
163 xs_sldb_free(xs_sldb_db); 163 xs_sldb_free(xs_sldb_db);
164 xs_sldb_db = NULL; 164 xs_sldb_db = NULL;
165 XS_MUTEX_UNLOCK(xs_cfg); 165 XS_MUTEX_UNLOCK(xs_cfg);
166 XS_MUTEX_UNLOCK(xs_sldb_db); 166 XS_MUTEX_UNLOCK(xs_sldb_db);
167 return -4; 167 return -4;
168 } 168 }
169 169
170 XS_MUTEX_UNLOCK(xs_cfg); 170 XS_MUTEX_UNLOCK(xs_cfg);
171 XS_MUTEX_UNLOCK(xs_sldb_db); 171 XS_MUTEX_UNLOCK(xs_sldb_db);
172 return 0; 172 return 0;
173 } 173 }
174 174
175 175
176 void xs_songlen_close(void) 176 void xs_songlen_close(void)
177 { 177 {
178 XS_MUTEX_LOCK(xs_sldb_db); 178 XS_MUTEX_LOCK(xs_sldb_db);
179 xs_sldb_free(xs_sldb_db); 179 xs_sldb_free(xs_sldb_db);
180 xs_sldb_db = NULL; 180 xs_sldb_db = NULL;
181 XS_MUTEX_UNLOCK(xs_sldb_db); 181 XS_MUTEX_UNLOCK(xs_sldb_db);
182 } 182 }
183 183
184 184
185 sldb_node_t *xs_songlen_get(const gchar * filename) 185 sldb_node_t *xs_songlen_get(const gchar * filename)
186 { 186 {
187 sldb_node_t *result; 187 sldb_node_t *result;
188 188
189 XS_MUTEX_LOCK(xs_sldb_db); 189 XS_MUTEX_LOCK(xs_sldb_db);
190 190
191 if (xs_cfg.songlenDBEnable && xs_sldb_db) 191 if (xs_cfg.songlenDBEnable && xs_sldb_db)
192 result = xs_sldb_get(xs_sldb_db, filename); 192 result = xs_sldb_get(xs_sldb_db, filename);
193 else 193 else
194 result = NULL; 194 result = NULL;
195 195
196 XS_MUTEX_UNLOCK(xs_sldb_db); 196 XS_MUTEX_UNLOCK(xs_sldb_db);
197 197
198 return result; 198 return result;
199 } 199 }
200 200
201 201
202 /* Allocate a new tune information structure 202 /* Allocate a new tune information structure
203 */ 203 */
204 xs_tuneinfo_t *xs_tuneinfo_new(const gchar * filename, 204 xs_tuneinfo_t *xs_tuneinfo_new(const gchar * filename,
205 gint nsubTunes, gint startTune, const gchar * sidName, 205 gint nsubTunes, gint startTune, const gchar * sidName,
206 const gchar * sidComposer, const gchar * sidCopyright, 206 const gchar * sidComposer, const gchar * sidCopyright,
207 gint loadAddr, gint initAddr, gint playAddr, 207 gint loadAddr, gint initAddr, gint playAddr,
208 gint dataFileLen, const gchar *sidFormat, gint sidModel) 208 gint dataFileLen, const gchar *sidFormat, gint sidModel)
209 { 209 {
210 xs_tuneinfo_t *result; 210 xs_tuneinfo_t *result;
211 sldb_node_t *tmpLength; 211 sldb_node_t *tmpLength;
212 gint i; 212 gint i;
213 213
214 /* Allocate structure */ 214 /* Allocate structure */
215 result = (xs_tuneinfo_t *) g_malloc0(sizeof(xs_tuneinfo_t)); 215 result = (xs_tuneinfo_t *) g_malloc0(sizeof(xs_tuneinfo_t));
216 if (!result) { 216 if (!result) {
217 xs_error("Could not allocate memory for tuneinfo ('%s')\n", 217 xs_error("Could not allocate memory for tuneinfo ('%s')\n",
218 filename); 218 filename);
219 return NULL; 219 return NULL;
220 } 220 }
221 221
222 result->sidFilename = XS_CS_FILENAME(filename); 222 result->sidFilename = XS_CS_FILENAME(filename);
223 if (!result->sidFilename) { 223 if (!result->sidFilename) {
224 xs_error("Could not allocate sidFilename ('%s')\n", 224 xs_error("Could not allocate sidFilename ('%s')\n",
225 filename); 225 filename);
226 g_free(result); 226 g_free(result);
227 return NULL; 227 return NULL;
228 } 228 }
229 229
230 /* Allocate space for subtune information */ 230 /* Allocate space for subtune information */
231 result->subTunes = g_malloc0(sizeof(xs_subtuneinfo_t) * (nsubTunes + 1)); 231 result->subTunes = g_malloc0(sizeof(xs_subtuneinfo_t) * (nsubTunes + 1));
232 if (!result->subTunes) { 232 if (!result->subTunes) {
233 xs_error("Could not allocate memory for subtuneinfo ('%s', %i)\n", 233 xs_error("Could not allocate memory for subtuneinfo ('%s', %i)\n",
234 filename, nsubTunes); 234 filename, nsubTunes);
235 235
236 g_free(result->sidFilename); 236 g_free(result->sidFilename);
237 g_free(result); 237 g_free(result);
238 return NULL; 238 return NULL;
239 } 239 }
240 240
241 /* The following allocations don't matter if they fail */ 241 /* The following allocations don't matter if they fail */
242 result->sidName = XS_CS_SID(sidName); 242 result->sidName = XS_CS_SID(sidName);
243 result->sidComposer = XS_CS_SID(sidComposer); 243 result->sidComposer = XS_CS_SID(sidComposer);
244 result->sidCopyright = XS_CS_SID(sidCopyright); 244 result->sidCopyright = XS_CS_SID(sidCopyright);
245 245
246 result->nsubTunes = nsubTunes; 246 result->nsubTunes = nsubTunes;
247 result->startTune = startTune; 247 result->startTune = startTune;
248 248
249 result->loadAddr = loadAddr; 249 result->loadAddr = loadAddr;
250 result->initAddr = initAddr; 250 result->initAddr = initAddr;
251 result->playAddr = playAddr; 251 result->playAddr = playAddr;
252 result->dataFileLen = dataFileLen; 252 result->dataFileLen = dataFileLen;
253 result->sidFormat = XS_CS_SID(sidFormat); 253 result->sidFormat = XS_CS_SID(sidFormat);
254 254
255 result->sidModel = sidModel; 255 result->sidModel = sidModel;
256 256
257 /* Get length information (NOTE: Do not free this!) */ 257 /* Get length information (NOTE: Do not free this!) */
258 tmpLength = xs_songlen_get(filename); 258 tmpLength = xs_songlen_get(filename);
259 259
260 /* Fill in sub-tune information */ 260 /* Fill in sub-tune information */
261 for (i = 0; i < result->nsubTunes; i++) { 261 for (i = 0; i < result->nsubTunes; i++) {
262 if (tmpLength && (i < tmpLength->nlengths)) 262 if (tmpLength && (i < tmpLength->nlengths))
263 result->subTunes[i].tuneLength = tmpLength->lengths[i]; 263 result->subTunes[i].tuneLength = tmpLength->lengths[i];
264 else 264 else
265 result->subTunes[i].tuneLength = -1; 265 result->subTunes[i].tuneLength = -1;
266 266
267 result->subTunes[i].tuneSpeed = -1; 267 result->subTunes[i].tuneSpeed = -1;
268 } 268 }
269 269
270 return result; 270 return result;
271 } 271 }
272 272
273 273
274 /* Free given tune information structure 274 /* Free given tune information structure
275 */ 275 */
276 void xs_tuneinfo_free(xs_tuneinfo_t * tune) 276 void xs_tuneinfo_free(xs_tuneinfo_t * tune)
277 { 277 {
278 if (!tune) return; 278 if (!tune) return;
279 279
280 g_free(tune->subTunes); 280 g_free(tune->subTunes);
281 g_free(tune->sidFilename); 281 g_free(tune->sidFilename);
282 g_free(tune->sidName); 282 g_free(tune->sidName);
283 g_free(tune->sidComposer); 283 g_free(tune->sidComposer);
284 g_free(tune->sidCopyright); 284 g_free(tune->sidCopyright);
285 g_free(tune->sidFormat); 285 g_free(tune->sidFormat);
286 g_free(tune); 286 g_free(tune);
287 } 287 }