-
Notifications
You must be signed in to change notification settings - Fork 2
/
cmsfsck.c
75 lines (63 loc) · 2.06 KB
/
cmsfsck.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
*
* Name: cmsfsck.c (C source)
* 'fsck' for CMS filesystems
*
* Note: Common Linux practice is to copy or rename
* the executable so that it is known as 'fsck.cms'.
* This is not strictly required for "utility mode" CMS FS.
*/
#include <time.h>
/* the following is a cheezy way to get ssize_t def'd */
#include <fcntl.h>
#include <stdio.h>
#include "cmsfs.h"
#define USAGE "Usage: %s cmsvol [ cmsvol ... ] \n"
int main(int argc,char*argv[])
{
int i, j, k, rc, percent;
struct CMSSUPER *tempvols;
/* process options */
for (i = 1 ; i < argc && argv[i][0] == '-' ; i++)
{
switch (argv[i][1])
{
case '?': case 'h': case 'H': /* quickie help */
(void) fprintf(stderr,"%s %s\n",CMSFS_DESCRIPTION,CMSFS_VERSION);
(void) fprintf(stderr,"'fsck' for CMS volumes.\n");
(void) fprintf(stderr,USAGE,argv[0]);
return 0;
case 'd':
case 'f': /* devname = argv[++i] ; */
/* (see loop below; handled differently now) */
break;
/* "Automatically repair the file system without any questions ..." */
case 'a': /* we don't repair anyway; just ignore it */
break;
default:
break;
}
}
/* sanity check */
if (argc <= i)
{
(void) fprintf(stderr,"Please specify a CMS volume to check.\n");
(void) fprintf(stderr,USAGE,argv[0]);
return 24;
}
while (i < argc)
{
/* 'mount' it to validate the ADT and directory FST */
tempvols = cmsfs_vopen(argv[i]);
if (tempvols == NULL)
{
(void) fprintf(stderr,"'%s' is not a CMS volume.\n",argv[i]);
return -1;
}
/* 'umount' to cleanly release resources */
rc = cmsfs_vclose(tempvols);
if (rc != 0) return rc;
i++;
}
return 0;
}