35 gchar *imgpath = g_path_get_dirname(filename);
37 static const gchar *glob_patterns[] = {
"",
"_????", NULL };
38 const gchar *
c3 = filename + strlen(filename);
39 while(*
c3 !=
'\\' &&
c3 > filename)
c3--;
41 const gchar **glob_pattern = glob_patterns;
45 g_strlcpy(pattern, filename,
sizeof(pattern));
46 gchar *
c1 = pattern + strlen(pattern);
47 while(*
c1 !=
'.' &&
c1 > pattern)
c1--;
48 g_strlcpy(
c1, *glob_pattern, pattern +
sizeof(pattern) -
c1);
49 const gchar *
c2 = filename + strlen(filename);
50 while(*
c2 !=
'.' &&
c2 > filename)
c2--;
51 snprintf(
c1 + strlen(*glob_pattern), pattern +
sizeof(pattern) -
c1 - strlen(*glob_pattern),
"%s.xmp",
c2);
52 wchar_t *wpattern = g_utf8_to_utf16(pattern, -1, NULL, NULL, NULL);
53 WIN32_FIND_DATAW data;
54 HANDLE handle = FindFirstFileW(wpattern, &data);
56 gchar *imgfile_without_path=g_strndup(
c3,
c2-
c3);
57 if(handle != INVALID_HANDLE_VALUE)
61 gchar *file = g_utf16_to_utf8(data.cFileName, -1, NULL, NULL, NULL);
62 gchar *short_file_name = g_strndup(file, strlen(file) - 4 +
c2 - filename - strlen(filename));
63 gboolean valid_xmp_name =
FALSE;
64 if(!(valid_xmp_name = (strlen(short_file_name) == strlen(imgfile_without_path))))
67 gchar *c4 = short_file_name + strlen(short_file_name);
74 while(g_ascii_isdigit(*c4) && c4 > short_file_name &&
i <= 4);
75 valid_xmp_name = (*c4 ==
'_' && strlen(short_file_name) == strlen(imgfile_without_path) +
i);
79 files = g_list_append(files, g_build_filename(imgpath, file, NULL));
84 while(FindNextFileW(handle, &data));