/* See if the filesystem matches the criteria given by the -t option */ static int fs_match(struct fs_info *fs, struct fs_type_compile *cmp) { int n, ret = 0, checked_type = 0; char *cp; if (cmp->list == 0 || cmp->list[0] == 0) return 1; for (n=0; (cp = cmp->list[n]); n++) { switch (cmp->type[n]) { case FS_TYPE_NORMAL: checked_type++; if (strcmp(cp, fs->type) == 0) { ret = 1; } break; case FS_TYPE_NEGOPT: if (opt_in_list(cp, fs->opts)) return 0; break; case FS_TYPE_OPT: if (!opt_in_list(cp, fs->opts)) return 0; break; } } if (checked_type == 0) return 1; return (cmp->negate ? !ret : ret); }
/* Check if we should ignore this filesystem. */ static int ignore(struct fs_info *fs) { const char **ip; int wanted = 0; /* * If the pass number is 0, ignore it. */ if (fs->passno == 0) return 1; /* * If this is a bind mount, ignore it. */ if (opt_in_list("bind", fs->opts)) { fprintf(stderr, _("%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"), fs->mountpt); return 1; } interpret_type(fs); /* * If a specific fstype is specified, and it doesn't match, * ignore it. */ if (!fs_match(fs, &fs_type_compiled)) return 1; /* Are we ignoring this type? */ for(ip = ignored_types; *ip; ip++) if (strcmp(fs->type, *ip) == 0) return 1; /* Do we really really want to check this fs? */ for(ip = really_wanted; *ip; ip++) if (strcmp(fs->type, *ip) == 0) { wanted = 1; break; } /* See if the <fsck.fs> program is available. */ if (find_fsck(fs->type) == NULL) { if (wanted) fprintf(stderr, _("fsck: cannot check %s: fsck.%s not found\n"), fs->device, fs->type); return 1; } /* We can and want to check this file system type. */ return 0; }
static int ignore(struct fs_info *fs) { const char **ip; int wanted = 0; if (fs->passno == 0) return 1; if (opt_in_list("bind", fs->opts)) { fprintf(stderr, _("%s: skipping bad line in /etc/fstab: bind mount with nonzero fsck pass number\n"), fs->mountpt); return 1; } interpret_type(fs); if (!fs_match(fs, &fs_type_compiled)) return 1; for(ip = ignored_types; *ip; ip++) if (strcmp(fs->type, *ip) == 0) return 1; for(ip = really_wanted; *ip; ip++) if (strcmp(fs->type, *ip) == 0) { wanted = 1; break; } if (find_fsck(fs->type) == NULL) { if (wanted) fprintf(stderr, _("fsck: cannot check %s: fsck.%s not found\n"), fs->device, fs->type); return 1; } return 0; }