|
@@ -250,16 +250,21 @@ static char *file_stat(DOS_FILE *file)
|
|
|
}
|
|
|
|
|
|
|
|
|
-static int bad_name(unsigned char *name)
|
|
|
+static int bad_name(DOS_FILE *file)
|
|
|
{
|
|
|
int i, spc, suspicious = 0;
|
|
|
char *bad_chars = atari_format ? "*?\\/:" : "*?<>|\"\\/:";
|
|
|
+ char *name = file->dir_ent.name;
|
|
|
|
|
|
/* Do not complain about (and auto-correct) the extended attribute files
|
|
|
* of OS/2. */
|
|
|
if (strncmp(name,"EA DATA SF",11) == 0 ||
|
|
|
strncmp(name,"WP ROOT SF",11) == 0) return 0;
|
|
|
|
|
|
+ /* don't complain about the dummy 11 bytes used by patched Linux
|
|
|
+ kernels */
|
|
|
+ if (file->lfn && name[0] == ' ') return 0;
|
|
|
+
|
|
|
for (i = 0; i < 8; i++) {
|
|
|
if (name[i] < ' ' || name[i] == 0x7f) return 1;
|
|
|
if (name[i] > 0x7f) ++suspicious;
|
|
@@ -590,7 +595,7 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots)
|
|
|
parent = (*root)->parent;
|
|
|
good = bad = 0;
|
|
|
for (walk = root; *walk; walk = &(*walk)->next)
|
|
|
- if (bad_name((*walk)->dir_ent.name)) bad++;
|
|
|
+ if (bad_name(*walk)) bad++;
|
|
|
else good++;
|
|
|
if (*root && parent && good+bad > 4 && bad > good/2) {
|
|
|
printf("%s\n Has a large number of bad entries. (%d/%d)\n",
|
|
@@ -617,7 +622,7 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots)
|
|
|
else dotdot++;
|
|
|
}
|
|
|
if (!((*walk)->dir_ent.attr & ATTR_VOLUME) &&
|
|
|
- bad_name((*walk)->dir_ent.name)) {
|
|
|
+ bad_name(*walk)) {
|
|
|
printf("%s\n Bad file name.\n",path_name(*walk));
|
|
|
if (interactive)
|
|
|
printf("1) Drop file\n2) Rename file\n3) Auto-rename\n"
|
|
@@ -647,7 +652,7 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots)
|
|
|
skip = 0;
|
|
|
while (*scan && !skip) {
|
|
|
if (!((*scan)->dir_ent.attr & ATTR_VOLUME) &&
|
|
|
- !strncmp((*walk)->dir_ent.name,(*scan)->dir_ent.name,MSDOS_NAME)) {
|
|
|
+ !memcmp((*walk)->dir_ent.name,(*scan)->dir_ent.name,MSDOS_NAME)) {
|
|
|
printf("%s\n Duplicate directory entry.\n First %s\n",
|
|
|
path_name(*walk),file_stat(*walk));
|
|
|
printf(" Second %s\n",file_stat(*scan));
|