aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/lib
diff options
context:
space:
mode:
authorTim Deegan <Tim.Deegan@citrix.com>2011-01-11 18:13:44 +0000
committerTim Deegan <Tim.Deegan@citrix.com>2011-01-11 18:13:44 +0000
commitafadd6ac31bbf427036baa0cbab4fe1b147be10d (patch)
tree7db3e8f0ffd9854ea420c80bdcb3484584277078 /extras/mini-os/lib
parent4e86bc34ad901c578d71b0fdb5e14eb591ef7811 (diff)
downloadxen-afadd6ac31bbf427036baa0cbab4fe1b147be10d.tar.gz
xen-afadd6ac31bbf427036baa0cbab4fe1b147be10d.tar.bz2
xen-afadd6ac31bbf427036baa0cbab4fe1b147be10d.zip
tools: remove fs-front/fs-back
Its access controls are really not OK. In particular, it's not good for libxl, which stores per-VM config blobs in a directory that is exported to all VMs. This will break stub-qemu save/restore, which is the only user of fs-front that I'm aware of, but: - It's currently broken anyway (fs-back isn't run by default and crashes if it is run manually); and - Stefano has a plan to plumb qemu save records through a dedicated console channel instead. Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
Diffstat (limited to 'extras/mini-os/lib')
-rw-r--r--extras/mini-os/lib/sys.c221
1 files changed, 13 insertions, 208 deletions
diff --git a/extras/mini-os/lib/sys.c b/extras/mini-os/lib/sys.c
index b127996df5..51a801f0ca 100644
--- a/extras/mini-os/lib/sys.c
+++ b/extras/mini-os/lib/sys.c
@@ -47,7 +47,6 @@
#ifdef HAVE_LWIP
#include <lwip/sockets.h>
#endif
-#include <fs.h>
#define debug(fmt, ...) \
@@ -158,13 +157,8 @@ char *getcwd(char *buf, size_t size)
int mkdir(const char *pathname, mode_t mode)
{
- int ret;
- ret = fs_create(fs_import, (char *) pathname, 1, mode);
- if (ret < 0) {
- errno = EIO;
- return -1;
- }
- return 0;
+ errno = EIO;
+ return -1;
}
int posix_openpt(int flags)
@@ -183,7 +177,7 @@ int posix_openpt(int flags)
int open(const char *pathname, int flags, ...)
{
- int fs_fd, fd;
+ int fd;
/* Ugly, but fine. */
if (!strncmp(pathname,LOG_PATH,strlen(LOG_PATH))) {
fd = alloc_fd(FTYPE_CONSOLE);
@@ -197,34 +191,8 @@ int open(const char *pathname, int flags, ...)
}
if (!strncmp(pathname, "/dev/ptmx", strlen("/dev/ptmx")))
return posix_openpt(flags);
- printk("open(%s, %x)", pathname, flags);
- switch (flags & ~O_ACCMODE) {
- case 0:
- fs_fd = fs_open(fs_import, (void *) pathname);
- break;
- case O_CREAT|O_TRUNC:
- {
- va_list ap;
- mode_t mode;
- va_start(ap, flags);
- mode = va_arg(ap, mode_t);
- va_end(ap);
- fs_fd = fs_create(fs_import, (void *) pathname, 0, mode);
- break;
- }
- default:
- printk(" unsupported flags\n");
- do_exit();
- }
- if (fs_fd < 0) {
- errno = EIO;
- return -1;
- }
- fd = alloc_fd(FTYPE_FILE);
- printk("-> %d\n", fd);
- files[fd].file.fd = fs_fd;
- files[fd].file.offset = 0;
- return fd;
+ errno = EIO;
+ return -1;
}
int isatty(int fd)
@@ -248,20 +216,6 @@ int read(int fd, void *buf, size_t nbytes)
remove_waiter(w);
return ret;
}
- case FTYPE_FILE: {
- ssize_t ret;
- if (nbytes > PAGE_SIZE * FSIF_NR_READ_GNTS)
- nbytes = PAGE_SIZE * FSIF_NR_READ_GNTS;
- ret = fs_read(fs_import, files[fd].file.fd, buf, nbytes, files[fd].file.offset);
- if (ret > 0) {
- files[fd].file.offset += ret;
- return ret;
- } else if (ret < 0) {
- errno = EIO;
- return -1;
- }
- return 0;
- }
#ifdef HAVE_LWIP
case FTYPE_SOCKET:
return lwip_read(files[fd].socket.fd, buf, nbytes);
@@ -309,20 +263,6 @@ int write(int fd, const void *buf, size_t nbytes)
case FTYPE_CONSOLE:
console_print(files[fd].cons.dev, (char *)buf, nbytes);
return nbytes;
- case FTYPE_FILE: {
- ssize_t ret;
- if (nbytes > PAGE_SIZE * FSIF_NR_WRITE_GNTS)
- nbytes = PAGE_SIZE * FSIF_NR_WRITE_GNTS;
- ret = fs_write(fs_import, files[fd].file.fd, (void *) buf, nbytes, files[fd].file.offset);
- if (ret > 0) {
- files[fd].file.offset += ret;
- return ret;
- } else if (ret < 0) {
- errno = EIO;
- return -1;
- }
- return 0;
- }
#ifdef HAVE_LWIP
case FTYPE_SOCKET:
return lwip_write(files[fd].socket.fd, (void*) buf, nbytes);
@@ -340,48 +280,11 @@ int write(int fd, const void *buf, size_t nbytes)
off_t lseek(int fd, off_t offset, int whence)
{
- if (files[fd].type != FTYPE_FILE) {
- errno = ESPIPE;
- return (off_t) -1;
- }
- switch (whence) {
- case SEEK_SET:
- files[fd].file.offset = offset;
- break;
- case SEEK_CUR:
- files[fd].file.offset += offset;
- break;
- case SEEK_END: {
- struct stat st;
- int ret;
- ret = fstat(fd, &st);
- if (ret)
- return -1;
- files[fd].file.offset = st.st_size + offset;
- break;
- }
- default:
- errno = EINVAL;
- return -1;
- }
- return files[fd].file.offset;
+ errno = ESPIPE;
+ return (off_t) -1;
}
int fsync(int fd) {
- switch (files[fd].type) {
- case FTYPE_FILE: {
- int ret;
- ret = fs_sync(fs_import, files[fd].file.fd);
- if (ret < 0) {
- errno = EIO;
- return -1;
- }
- return 0;
- }
- default:
- break;
- }
- printk("fsync(%d): Bad descriptor\n", fd);
errno = EBADF;
return -1;
}
@@ -393,15 +296,6 @@ int close(int fd)
default:
files[fd].type = FTYPE_NONE;
return 0;
- case FTYPE_FILE: {
- int ret = fs_close(fs_import, files[fd].file.fd);
- files[fd].type = FTYPE_NONE;
- if (ret < 0) {
- errno = EIO;
- return -1;
- }
- return 0;
- }
case FTYPE_XENBUS:
xs_daemon_close((void*)(intptr_t) fd);
return 0;
@@ -460,43 +354,10 @@ static void init_stat(struct stat *buf)
buf->st_blocks = 0;
}
-static void stat_from_fs(struct stat *buf, struct fsif_stat_response *stat)
-{
- buf->st_mode = stat->stat_mode;
- buf->st_uid = stat->stat_uid;
- buf->st_gid = stat->stat_gid;
- buf->st_size = stat->stat_size;
- buf->st_atime = stat->stat_atime;
- buf->st_mtime = stat->stat_mtime;
- buf->st_ctime = stat->stat_ctime;
-}
-
int stat(const char *path, struct stat *buf)
{
- struct fsif_stat_response stat;
- int ret;
- int fs_fd;
- printk("stat(%s)\n", path);
- fs_fd = fs_open(fs_import, (char*) path);
- if (fs_fd < 0) {
- errno = EIO;
- ret = -1;
- goto out;
- }
- ret = fs_stat(fs_import, fs_fd, &stat);
- if (ret < 0) {
- errno = EIO;
- ret = -1;
- goto outfd;
- }
- init_stat(buf);
- stat_from_fs(buf, &stat);
- ret = 0;
-
-outfd:
- fs_close(fs_import, fs_fd);
-out:
- return ret;
+ errno = EIO;
+ return -1;
}
int fstat(int fd, struct stat *buf)
@@ -514,18 +375,6 @@ int fstat(int fd, struct stat *buf)
buf->st_ctime = time(NULL);
return 0;
}
- case FTYPE_FILE: {
- struct fsif_stat_response stat;
- int ret;
- ret = fs_stat(fs_import, files[fd].file.fd, &stat);
- if (ret < 0) {
- errno = EIO;
- return -1;
- }
- /* The protocol is a bit evasive about this value */
- stat_from_fs(buf, &stat);
- return 0;
- }
default:
break;
}
@@ -537,35 +386,14 @@ int fstat(int fd, struct stat *buf)
int ftruncate(int fd, off_t length)
{
- switch (files[fd].type) {
- case FTYPE_FILE: {
- int ret;
- ret = fs_truncate(fs_import, files[fd].file.fd, length);
- if (ret < 0) {
- errno = EIO;
- return -1;
- }
- return 0;
- }
- default:
- break;
- }
-
- printk("ftruncate(%d): Bad descriptor\n", fd);
errno = EBADF;
return -1;
}
int remove(const char *pathname)
{
- int ret;
- printk("remove(%s)", pathname);
- ret = fs_remove(fs_import, (char*) pathname);
- if (ret < 0) {
- errno = EIO;
- return -1;
- }
- return 0;
+ errno = EIO;
+ return -1;
}
int unlink(const char *pathname)
@@ -618,26 +446,9 @@ DIR *opendir(const char *name)
struct dirent *readdir(DIR *dir)
{
- if (dir->curentry >= 0) {
- free(dir->entries[dir->curentry]);
- dir->entries[dir->curentry] = NULL;
- }
- dir->curentry++;
- if (dir->curentry >= dir->nbentries) {
- dir->offset += dir->nbentries;
- free(dir->entries);
- dir->curentry = -1;
- dir->nbentries = 0;
- if (!dir->has_more)
- return NULL;
- dir->entries = fs_list(fs_import, dir->name, dir->offset, &dir->nbentries, &dir->has_more);
- if (!dir->entries || !dir->nbentries)
- return NULL;
- dir->curentry = 0;
- }
- dir->dirent.d_name = dir->entries[dir->curentry];
- return &dir->dirent;
+ return NULL;
}
+
int closedir(DIR *dir)
{
int i;
@@ -654,7 +465,6 @@ int closedir(DIR *dir)
static const char file_types[] = {
[FTYPE_NONE] = 'N',
[FTYPE_CONSOLE] = 'C',
- [FTYPE_FILE] = 'F',
[FTYPE_XENBUS] = 'S',
[FTYPE_XC] = 'X',
[FTYPE_EVTCHN] = 'E',
@@ -753,11 +563,6 @@ static int select_poll(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exce
if (FD_ISSET(i, readfds) || FD_ISSET(i, writefds) || FD_ISSET(i, exceptfds))
printk("bogus fd %d in select\n", i);
/* Fallthrough. */
- case FTYPE_FILE:
- FD_CLR(i, readfds);
- FD_CLR(i, writefds);
- FD_CLR(i, exceptfds);
- break;
case FTYPE_CONSOLE:
if (FD_ISSET(i, readfds)) {
if (xencons_ring_avail(files[i].cons.dev))