| #ifndef PRECOMPOSE_UNICODE_H | |
| #include <sys/stat.h> | |
| #include <sys/types.h> | |
| #include <dirent.h> | |
| #include <iconv.h> | |
| typedef struct dirent_prec_psx { | |
| ino_t d_ino; /* Posix */ | |
| size_t max_name_len; /* See below */ | |
| unsigned char d_type; /* available on all systems git runs on */ | |
| /* | |
| * See http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/dirent.h.html | |
| * NAME_MAX + 1 should be enough, but some systems have | |
| * NAME_MAX=255 and strlen(d_name) may return 508 or 510 | |
| * Solution: allocate more when needed, see precompose_utf8_readdir() | |
| */ | |
| char d_name[NAME_MAX+1]; | |
| } dirent_prec_psx; | |
| typedef struct { | |
| iconv_t ic_precompose; | |
| DIR *dirp; | |
| struct dirent_prec_psx *dirent_nfc; | |
| } PREC_DIR; | |
| void precompose_argv(int argc, const char **argv); | |
| void probe_utf8_pathname_composition(char *, int); | |
| PREC_DIR *precompose_utf8_opendir(const char *dirname); | |
| struct dirent_prec_psx *precompose_utf8_readdir(PREC_DIR *dirp); | |
| int precompose_utf8_closedir(PREC_DIR *dirp); | |
| #ifndef PRECOMPOSE_UNICODE_C | |
| #define dirent dirent_prec_psx | |
| #define opendir(n) precompose_utf8_opendir(n) | |
| #define readdir(d) precompose_utf8_readdir(d) | |
| #define closedir(d) precompose_utf8_closedir(d) | |
| #define DIR PREC_DIR | |
| #endif /* PRECOMPOSE_UNICODE_C */ | |
| #define PRECOMPOSE_UNICODE_H | |
| #endif /* PRECOMPOSE_UNICODE_H */ |