From: Philip Homburg Date: Fri, 24 Nov 2006 14:01:14 +0000 (+0000) Subject: Better error handling in _mount.c X-Git-Tag: v3.1.3~139 X-Git-Url: http://zhaoyanbai.com/repos/?a=commitdiff_plain;h=d84dd06b3f1c76774dc87b4cf1818d0ae2a729fe;p=minix.git Better error handling in _mount.c --- diff --git a/lib/posix/_mount.c b/lib/posix/_mount.c index 7130d450d..e7dc63134 100755 --- a/lib/posix/_mount.c +++ b/lib/posix/_mount.c @@ -13,37 +13,31 @@ PUBLIC int mount(special, name, rwflag) char *name, *special; int rwflag; { + int r; struct stat stat_buf; message m; m.RS_CMD_ADDR = "/sbin/mfs"; if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) { - printf("MOUNT: /sbin/mfs doesn't exist\n"); - m.RS_CMD_ADDR = 0; - } - - if (!m.RS_CMD_ADDR) { - m.RS_CMD_ADDR = "/bin/mfs"; - if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) { - printf("MOUNT: /bin/mfs doesn't exist\n"); - m.RS_CMD_ADDR = 0; + /* /sbin/mfs does not exist, try /bin/mfs as well */ + m.RS_CMD_ADDR = "/bin/mfs"; + if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) { + /* /bin/mfs does not exist either, give up */ + return -1; } } - 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_DEV_MAJOR = 0; - m.RS_PERIOD = 0; - if (OK != _taskcall(RS_PROC_NR, RS_UP, &m)) { - printf("MOUNT: error sending request to RS\n"); - } - else { - /* copy endpointnumber */ - m.m1_p3 = (char*)(unsigned long)m.RS_ENDPOINT; - } + if (m.RS_CMD_ADDR) { + m.RS_CMD_LEN = strlen(m.RS_CMD_ADDR); + m.RS_DEV_MAJOR = 0; + m.RS_PERIOD = 0; + r= _taskcall(RS_PROC_NR, RS_UP, &m); + if (r != OK) { + errno= -r; + return -1; + } + /* copy endpointnumber */ + m.m1_p3 = (char*)(unsigned long)m.RS_ENDPOINT; } m.m1_i1 = strlen(special) + 1;