mirror of
https://github.com/depp/syncfiles.git
synced 2024-06-24 15:30:17 +00:00
Move extension patterns from code to data
GitOrigin-RevId: 2ea4f224f7f00bf7be5f73dd77c4ebe3d69f53ae
This commit is contained in:
parent
79bca732c8
commit
6b7a783916
2
defs.h
2
defs.h
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
typedef unsigned char bool;
|
typedef unsigned char bool;
|
||||||
|
|
||||||
|
#define ARRAY_COUNT(x) (sizeof(x) / sizeof(*x))
|
||||||
|
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
// util.c
|
// util.c
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
103
sync.c
103
sync.c
|
@ -112,16 +112,51 @@ static int dir_from_path(short *vRefNum, long *dirID, const char *dirpath) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct extension_info {
|
||||||
|
unsigned long extension;
|
||||||
|
file_type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct extension_info kExtensions1[] = {
|
||||||
|
{'c', kTypeText},
|
||||||
|
{'h', kTypeText},
|
||||||
|
{'r', kTypeText},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct extension_info kExtensions2[] = {
|
||||||
|
{'cc', kTypeText},
|
||||||
|
{'cp', kTypeText},
|
||||||
|
{'hh', kTypeText},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct extension_info kExtensions3[] = {
|
||||||
|
{'cpp', kTypeText},
|
||||||
|
{'cxx', kTypeText},
|
||||||
|
{'hpp', kTypeText},
|
||||||
|
{'hxx', kTypeText},
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct extension_info kExtensions4[] = {
|
||||||
|
{'rsrc', kTypeResource},
|
||||||
|
};
|
||||||
|
|
||||||
|
static file_type file_type_from_extension(unsigned long extension,
|
||||||
|
const struct extension_info *info,
|
||||||
|
int info_count) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < info_count; i++) {
|
||||||
|
if (extension == info[i].extension) {
|
||||||
|
return info[i].type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return kTypeUnknown;
|
||||||
|
}
|
||||||
|
|
||||||
// Get the file type for a file with the given name.
|
// Get the file type for a file with the given name.
|
||||||
static file_type file_type_from_name(const unsigned char *name) {
|
static file_type file_type_from_name(const unsigned char *name) {
|
||||||
int len, i, stem;
|
int len, i, stem;
|
||||||
const unsigned char *ext;
|
const unsigned char *ext;
|
||||||
char temp[32];
|
|
||||||
unsigned char c0, c1, c2;
|
|
||||||
|
|
||||||
if (EqualString(name, "\pmakefile", false, true)) {
|
|
||||||
return kTypeText;
|
|
||||||
}
|
|
||||||
stem = 0;
|
stem = 0;
|
||||||
len = name[0];
|
len = name[0];
|
||||||
for (i = 1; i <= len; i++) {
|
for (i = 1; i <= len; i++) {
|
||||||
|
@ -129,46 +164,28 @@ static file_type file_type_from_name(const unsigned char *name) {
|
||||||
stem = i;
|
stem = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (stem != 0) {
|
if (stem == 0) {
|
||||||
ext = name + stem + 1;
|
if (EqualString(name, "\pmakefile", false, true)) {
|
||||||
switch (len - stem) {
|
return kTypeText;
|
||||||
case 1:
|
|
||||||
// .c .h .r
|
|
||||||
c0 = ext[0];
|
|
||||||
if (c0 == 'c' || c0 == 'h' || c0 == 'r') {
|
|
||||||
return kTypeText;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
// .cc .cp .hh
|
|
||||||
c0 = ext[0];
|
|
||||||
c1 = ext[1];
|
|
||||||
if (c0 == 'c' && (c1 == 'c' || c1 == 'p') ||
|
|
||||||
c0 == 'h' && c1 == 'h') {
|
|
||||||
return kTypeText;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
// .cpp .hpp .cxx .hxx
|
|
||||||
c0 = ext[0];
|
|
||||||
c1 = ext[1];
|
|
||||||
c2 = ext[2];
|
|
||||||
if ((c0 == 'c' || c0 == 'h') &&
|
|
||||||
(c1 == 'p' && c2 == 'p' || c1 == 'x' && c2 == 'x')) {
|
|
||||||
return kTypeText;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
if (ext[0] == 'r' && ext[1] == 's' && ext[2] == 'r' &&
|
|
||||||
ext[3] == 'c') {
|
|
||||||
return kTypeResource;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (gLogLevel >= kLogVerbose) {
|
ext = name + stem + 1;
|
||||||
p2cstr(temp, name);
|
switch (len - stem) {
|
||||||
fprintf(stderr, "## Ignored: %s\n", temp);
|
case 1:
|
||||||
|
return file_type_from_extension(ext[0], kExtensions1,
|
||||||
|
ARRAY_COUNT(kExtensions1));
|
||||||
|
case 2:
|
||||||
|
return file_type_from_extension((ext[0] << 8) | ext[1], kExtensions2,
|
||||||
|
ARRAY_COUNT(kExtensions2));
|
||||||
|
case 3:
|
||||||
|
return file_type_from_extension(
|
||||||
|
((unsigned long)ext[0] << 16) | (ext[1] << 8) | ext[2],
|
||||||
|
kExtensions3, ARRAY_COUNT(kExtensions3));
|
||||||
|
case 4:
|
||||||
|
return file_type_from_extension(
|
||||||
|
((unsigned long)ext[0] << 24) | ((unsigned long)ext[1] << 16) |
|
||||||
|
(ext[2] << 8) | ext[3],
|
||||||
|
kExtensions4, ARRAY_COUNT(kExtensions4));
|
||||||
}
|
}
|
||||||
return kTypeUnknown;
|
return kTypeUnknown;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user