Mercurial > geeqie
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 |