-}
-
-char *
-blockcheck(name)
- char *name;
-{
- struct stat stslash, stblock, stchar;
- char *raw;
- int looped = 0;
-
- hotroot = 0;
- if (stat("/", &stslash) < 0){
- perror("/");
- printf("Can't stat root\n");
- return (0);
- }
-retry:
- if (stat(name, &stblock) < 0){
- perror(name);
- printf("Can't stat %s\n", name);
- return (0);
- }
- if ((stblock.st_mode & S_IFMT) == S_IFBLK) {
- if (stslash.st_dev == stblock.st_rdev) {
- hotroot++;
- return (name);
- }
- raw = rawname(name);
- if (stat(raw, &stchar) < 0){
- perror(raw);
- printf("Can't stat %s\n", raw);
- return (name);
- }
- if ((stchar.st_mode & S_IFMT) == S_IFCHR)
- return (raw);
- else {
- printf("%s is not a character device\n", raw);
- return (name);
- }
- } else if ((stblock.st_mode & S_IFMT) == S_IFCHR) {
- if (looped) {
- printf("Can't make sense out of name %s\n", name);
- return (0);
- }
- name = unrawname(name);
- looped++;
- goto retry;
- }
- printf("Can't make sense out of name %s\n", name);