Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/cs/vcs_src/mnt_mtab.c
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1990-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#include "mnt_imount.h"
21
22
struct entry_t
23
{
24
char* mpoint;
25
char* vcscmd;
26
};
27
28
typedef struct entry_t entry_t;
29
30
int im_restart_help(s)
31
char* s;
32
{
33
printf("\t%s # reset mount points\n", s);
34
return (0);
35
}
36
37
int add_entry(mpoint, cmd)
38
char* mpoint;
39
char* cmd;
40
{
41
register entry_t* entry;
42
43
if (mpoint == NULL || cmd == NULL)
44
return (-1);
45
entry = (entry_t *)malloc(sizeof(entry_t));
46
entry->mpoint = strdup(mpoint);
47
entry->vcscmd = strdup(cmd);
48
if (istate.mtab == NULL)
49
istate.mtab = hashalloc((HASHTABLE *)0, 0);
50
(void)hashput(istate.mtab, entry->mpoint, (char *)entry);
51
return (0);
52
}
53
54
#define hashrm(tbl, name) hashlook(tbl, name, HASH_DELETE, (char *) 0)
55
int rm_entry(mpoint)
56
register char* mpoint;
57
{
58
register entry_t* entry;
59
60
if (istate.mtab == NULL)
61
return (1);
62
if ((entry = (entry_t *)hashrm(istate.mtab, mpoint)) != NULL)
63
{
64
free(entry->mpoint);
65
free(entry->vcscmd);
66
free((char *)entry);
67
return (0);
68
}
69
return (1);
70
}
71
72
int im_restart(argc, argv)
73
int argc;
74
char** argv;
75
{
76
register char* s;
77
register int n;
78
int fd;
79
int do_call();
80
81
error_info.id = argv[0];
82
opt_info.index = 1;
83
while (n = optget(argv, "s:[server]"))
84
switch (n)
85
{
86
case 's':
87
s = opt_info.arg;
88
if ((fd = csopen(s, CS_OPEN_READ)) < 0)
89
{
90
printf("cannot connect cs server %s\n", s);
91
return (-1);
92
}
93
istate.cs_svc = strdup(s);
94
istate.fd = fd;
95
break;
96
case '?':
97
case ':':
98
printf("reboot");
99
return (1);
100
}
101
(void) hashwalk(istate.mtab, 0, do_call, 0);
102
return(0);
103
}
104
105
int do_call(mpoint, value, dump)
106
char* mpoint;
107
caddr_t value;
108
caddr_t dump;
109
{
110
register char* vcscmd;
111
char reply[1024 *2];
112
113
if (istate.mtab == NULL)
114
return (1);
115
116
memset(reply, 0, sizeof(reply));
117
118
if (value != NULL && (vcscmd = ((entry_t *)value)->vcscmd) != NULL)
119
{
120
if (vcs_write(vcscmd) > 0 &&
121
vcs_read(reply, 1024 * 2) > 0)
122
{
123
printmtmsg(reply);
124
return (0);
125
}
126
printf("%s cannot mount", mpoint);
127
return (-1);
128
}
129
return (-1);
130
}
131
132
133