Better error handling in _mount.c

This commit is contained in:
Philip Homburg 2006-11-24 14:01:14 +00:00
parent 2032e23e8c
commit d84dd06b3f

View File

@ -13,38 +13,32 @@ PUBLIC int mount(special, name, rwflag)
char *name, *special; char *name, *special;
int rwflag; int rwflag;
{ {
int r;
struct stat stat_buf; struct stat stat_buf;
message m; message m;
m.RS_CMD_ADDR = "/sbin/mfs"; m.RS_CMD_ADDR = "/sbin/mfs";
if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) { if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) {
printf("MOUNT: /sbin/mfs doesn't exist\n"); /* /sbin/mfs does not exist, try /bin/mfs as well */
m.RS_CMD_ADDR = 0;
}
if (!m.RS_CMD_ADDR) {
m.RS_CMD_ADDR = "/bin/mfs"; m.RS_CMD_ADDR = "/bin/mfs";
if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) { if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) {
printf("MOUNT: /bin/mfs doesn't exist\n"); /* /bin/mfs does not exist either, give up */
m.RS_CMD_ADDR = 0; return -1;
} }
} }
if (m.RS_CMD_ADDR) { if (m.RS_CMD_ADDR) {
if (!(stat_buf.st_mode & S_IFREG)) {
printf("MOUNT: FS binary is not a regular file\n");
}
m.RS_CMD_LEN = strlen(m.RS_CMD_ADDR); m.RS_CMD_LEN = strlen(m.RS_CMD_ADDR);
m.RS_DEV_MAJOR = 0; m.RS_DEV_MAJOR = 0;
m.RS_PERIOD = 0; m.RS_PERIOD = 0;
if (OK != _taskcall(RS_PROC_NR, RS_UP, &m)) { r= _taskcall(RS_PROC_NR, RS_UP, &m);
printf("MOUNT: error sending request to RS\n"); if (r != OK) {
errno= -r;
return -1;
} }
else {
/* copy endpointnumber */ /* copy endpointnumber */
m.m1_p3 = (char*)(unsigned long)m.RS_ENDPOINT; m.m1_p3 = (char*)(unsigned long)m.RS_ENDPOINT;
} }
}
m.m1_i1 = strlen(special) + 1; m.m1_i1 = strlen(special) + 1;
m.m1_i2 = strlen(name) + 1; m.m1_i2 = strlen(name) + 1;