comparison src/ui_fileops.c @ 1719:192d4752fd06

fixed sidecar grouping this fixes grouping of files which differs only in upper/lowercase extension. The old code stopped scanning when the first file was found.
author nadvornik
date Sat, 22 Aug 2009 20:20:19 +0000
parents 51d70f62338c
children 6a88c55c6f68
comparison
equal deleted inserted replaced
1718:f6ba63c3bb04 1719:192d4752fd06
321 gboolean ret; 321 gboolean ret;
322 322
323 if (!s) return FALSE; 323 if (!s) return FALSE;
324 sl = path_from_utf8(s); 324 sl = path_from_utf8(s);
325 ret = (lstat(sl, st) == 0); 325 ret = (lstat(sl, st) == 0);
326 g_free(sl);
327
328 return ret;
329 }
330
331 /* extension must contain only ASCII characters */
332 gboolean stat_utf8_case_insensitive_ext(GString *base, const gchar *ext, struct stat *st)
333 {
334 gchar *sl;
335 gchar *extl;
336 gboolean ret = FALSE;
337 gint ext_len;
338 gint base_len = strlen(base->str);
339
340 g_string_append(base, ext);
341 sl = path_from_utf8(base->str);
342
343 extl = strrchr(sl, '.');
344 if (extl)
345 {
346 gint i, j;
347 extl++; /* the first char after . */
348 ext_len = strlen(extl);
349
350 for (i = 0; i < (1 << ext_len); i++)
351 {
352 for (j = 0; j < ext_len; j++)
353 {
354 if (i & (1 << j))
355 extl[j] = g_ascii_toupper(extl[j]);
356 else
357 extl[j] = g_ascii_tolower(extl[j]);
358 }
359 ret = (stat(sl, st) == 0);
360 if (ret) break;
361 }
362
363 if (ret)
364 {
365 /* append the found extension to base */
366 base = g_string_truncate(base, base_len);
367 extl--;
368 g_string_append(base, extl);
369 }
370 }
371 g_free(sl); 326 g_free(sl);
372 327
373 return ret; 328 return ret;
374 } 329 }
375 330