minix/lib/posix/_mount.c

50 lines
994 B
C
Raw Normal View History

2005-04-21 16:53:53 +02:00
#include <lib.h>
#define mount _mount
#include <string.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/stat.h>
#include <minix/syslib.h>
#define OK 0
2005-04-21 16:53:53 +02:00
PUBLIC int mount(special, name, rwflag)
char *name, *special;
int rwflag;
{
2006-11-24 15:01:14 +01:00
int r;
struct stat stat_buf;
2005-04-21 16:53:53 +02:00
message m;
m.RS_CMD_ADDR = "/sbin/mfs";
if (stat(m.RS_CMD_ADDR, &stat_buf) == -1) {
2006-11-24 15:01:14 +01:00
/* /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;
}
}
2006-11-24 15:01:14 +01:00
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;
}
2005-04-21 16:53:53 +02:00
m.m1_i1 = strlen(special) + 1;
m.m1_i2 = strlen(name) + 1;
m.m1_i3 = rwflag;
m.m1_p1 = special;
m.m1_p2 = name;
return(_syscall(FS, MOUNT, &m));
}