[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Rename console binaries to xenconsole and xenconsoled.



# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID ec1878b6956ea9eab2349fde6dccb7d814585ff4
# Parent  6721c8cd1a3018b8dfdb3a2ecf049537185e3e54
Rename console binaries to xenconsole and xenconsoled.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>

diff -r 6721c8cd1a30 -r ec1878b6956e .hgignore
--- a/.hgignore Sun Aug  7 08:56:57 2005
+++ b/.hgignore Sun Aug  7 09:12:55 2005
@@ -86,8 +86,8 @@
 ^tools/check/\..*$
 ^tools/cmdline/.*$
 ^tools/cmdline/xen/.*$
-^tools/consoled/consoled$
-^tools/consoled/xc_console$
+^tools/console/xenconsoled$
+^tools/console/xenconsole$
 ^tools/debugger/pdb/pdb$
 ^tools/debugger/pdb/linux-[0-9.]*-module/.*\.ko$
 ^tools/debugger/pdb/linux-[0-9.]*-module/.*\.mod.c$
diff -r 6721c8cd1a30 -r ec1878b6956e tools/Makefile
--- a/tools/Makefile    Sun Aug  7 08:56:57 2005
+++ b/tools/Makefile    Sun Aug  7 09:12:55 2005
@@ -13,7 +13,7 @@
 #SUBDIRS += pygrub
 SUBDIRS += firmware
 SUBDIRS += security
-SUBDIRS += consoled
+SUBDIRS += console
 
 .PHONY: all install clean check check_clean ioemu eioemuinstall ioemuclean
 
diff -r 6721c8cd1a30 -r ec1878b6956e tools/misc/xend
--- a/tools/misc/xend   Sun Aug  7 08:56:57 2005
+++ b/tools/misc/xend   Sun Aug  7 09:12:55 2005
@@ -121,7 +121,7 @@
 
 def start_consoled():
     if os.fork() == 0:
-        os.execvp('/usr/sbin/consoled', ['/usr/sbin/consoled']);
+        os.execvp('/usr/sbin/xenconsoled', ['/usr/sbin/xenconsoled']);
             
 def main():
     try:
diff -r 6721c8cd1a30 -r ec1878b6956e tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py     Sun Aug  7 08:56:57 2005
+++ b/tools/python/xen/xm/create.py     Sun Aug  7 09:12:55 2005
@@ -698,8 +698,8 @@
 
         dom = make_domain(opts, config)
         if opts.vals.console_autoconnect:
-            cmd = "/usr/libexec/xen/xc_console %d" % dom
-            os.execvp('/usr/libexec/xen/xc_console', cmd.split())
+            cmd = "/usr/libexec/xen/xenconsole %d" % dom
+            os.execvp('/usr/libexec/xen/xenconsole', cmd.split())
         
 if __name__ == '__main__':
     main(sys.argv)
diff -r 6721c8cd1a30 -r ec1878b6956e tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Sun Aug  7 08:56:57 2005
+++ b/tools/python/xen/xm/main.py       Sun Aug  7 09:12:55 2005
@@ -709,8 +709,8 @@
         dom = args[1]
         info = server.xend_domain(dom)
         domid = int(sxp.child_value(info, 'id', '-1'))
-        cmd = "/usr/libexec/xen/xc_console %d" % domid
-        os.execvp('/usr/libexec/xen/xc_console', cmd.split())
+        cmd = "/usr/libexec/xen/xenconsole %d" % domid
+        os.execvp('/usr/libexec/xen/xenconsole', cmd.split())
 
 xm.prog(ProgConsole)
 
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/Makefile
--- a/tools/consoled/Makefile   Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,48 +0,0 @@
-# Makefile for consoled
-# based on xcs Makefile
-# Anthony Liguori 2005
-
-XEN_ROOT=../..
-include $(XEN_ROOT)/tools/Rules.mk
-
-CONSOLED_INSTALL_DIR = /usr/sbin
-XC_CONSOLE_INSTALL_DIR = /usr/libexec/xen
-
-INSTALL         = install
-INSTALL_PROG    = $(INSTALL) -m0755
-INSTALL_DIR     = $(INSTALL) -d -m0755
-
-CC       = gcc
-CFLAGS   = -Wall -Werror -g3
-
-CFLAGS  += -I $(XEN_XCS)
-CFLAGS  += -I $(XEN_LIBXC)
-CFLAGS  += -I $(XEN_XENSTORE)
-
-SRCS    :=
-SRCS    += main.c utils.c io.c
-
-HDRS     = $(wildcard *.h)
-OBJS     = $(patsubst %.c,%.o,$(SRCS))
-BIN      = consoled xc_console
-
-all: $(BIN)
-
-clean:
-       $(RM) *.a *.so *.o *.rpm $(BIN)
-
-consoled: $(OBJS)
-       $(CC) $(CFLAGS) $^ -o $@ -L$(XEN_LIBXC) -L$(XEN_XENSTORE) \
-              -lxc -lxenstore
-
-xc_console: xc_console.o
-       $(CC) $(CFLAGS) $^ -o $@ -L$(XEN_LIBXC) -L$(XEN_XENSTORE) \
-             -lxc -lxenstore
-
-$(OBJS): $(HDRS)
-
-install: $(BIN)
-       $(INSTALL_DIR) -p $(DESTDIR)/$(CONSOLED_INSTALL_DIR)
-       $(INSTALL_PROG) consoled $(DESTDIR)/$(CONSOLED_INSTALL_DIR)
-       $(INSTALL_DIR) -p $(DESTDIR)/$(XC_CONSOLE_INSTALL_DIR)
-       $(INSTALL_PROG) xc_console $(DESTDIR)/$(XC_CONSOLE_INSTALL_DIR)
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/io.c
--- a/tools/consoled/io.c       Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,343 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  Xen Console Daemon
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#define _GNU_SOURCE
-
-#include "utils.h"
-#include "io.h"
-
-#include "xc.h"
-#include "xs.h"
-#include "xen/io/domain_controller.h"
-#include "xcs_proto.h"
-
-#include <malloc.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <string.h>
-#include <sys/select.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <termios.h>
-
-#define MAX(a, b) (((a) > (b)) ? (a) : (b))
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-
-struct buffer
-{
-       char *data;
-       size_t size;
-       size_t capacity;
-       size_t max_capacity;
-};
-
-static void buffer_append(struct buffer *buffer, const void *data, size_t size)
-{
-       if ((buffer->capacity - buffer->size) < size) {
-               buffer->capacity += (size + 1024);
-               buffer->data = realloc(buffer->data, buffer->capacity);
-               if (buffer->data == NULL) {
-                       dolog(LOG_ERR, "Memory allocation failed");
-                       exit(ENOMEM);
-               }
-       }
-
-       memcpy(buffer->data + buffer->size, data, size);
-       buffer->size += size;
-
-       if (buffer->max_capacity &&
-           buffer->size > buffer->max_capacity) {
-               memmove(buffer->data + (buffer->size - buffer->max_capacity),
-                       buffer->data, buffer->max_capacity);
-               buffer->data = realloc(buffer->data, buffer->max_capacity);
-               buffer->capacity = buffer->max_capacity;
-       }
-}
-
-static bool buffer_empty(struct buffer *buffer)
-{
-       return buffer->size == 0;
-}
-
-static void buffer_advance(struct buffer *buffer, size_t size)
-{
-       size = MIN(size, buffer->size);
-       memmove(buffer->data, buffer + size, buffer->size - size);
-       buffer->size -= size;
-}
-
-struct domain
-{
-       int domid;
-       int tty_fd;
-       struct buffer buffer;
-       struct domain *next;
-};
-
-static struct domain *dom_head;
-
-static bool domain_is_valid(int domid)
-{
-       bool ret;
-       xc_dominfo_t info;
-
-       ret = (xc_domain_getinfo(xc, domid, 1, &info) == 1 &&
-              info.domid == domid);
-               
-       return ret;
-}
-
-static int domain_create_tty(struct domain *dom)
-{
-       char path[1024];
-       int master;
-
-       if ((master = getpt()) == -1 ||
-           grantpt(master) == -1 || unlockpt(master) == -1) {
-               dolog(LOG_ERR, "Failed to create tty for domain-%d",
-                     dom->domid);
-               master = -1;
-       } else {
-               const char *slave = ptsname(master);
-               struct termios term;
-               char *data;
-               unsigned int len;
-
-               if (tcgetattr(master, &term) != -1) {
-                       cfmakeraw(&term);
-                       tcsetattr(master, TCSAFLUSH, &term);
-               }
-
-               xs_mkdir(xs, "/console");
-               snprintf(path, sizeof(path), "/console/%d", dom->domid);
-               xs_mkdir(xs, path);
-               strcat(path, "/tty");
-
-               xs_write(xs, path, slave, strlen(slave), O_CREAT);
-
-               snprintf(path, sizeof(path), "/console/%d/limit", dom->domid);
-               data = xs_read(xs, path, &len);
-               if (data) {
-                       dom->buffer.max_capacity = strtoul(data, 0, 0);
-                       free(data);
-               }
-       }
-
-       return master;
-}
-
-static struct domain *create_domain(int domid)
-{
-       struct domain *dom;
-
-       dom = (struct domain *)malloc(sizeof(struct domain));
-       if (dom == NULL) {
-               dolog(LOG_ERR, "Out of memory %s:%s():L%d",
-                     __FILE__, __FUNCTION__, __LINE__);
-               exit(ENOMEM);
-       }
-
-       dom->domid = domid;
-       dom->tty_fd = domain_create_tty(dom);
-       dom->buffer.data = 0;
-       dom->buffer.size = 0;
-       dom->buffer.capacity = 0;
-       dom->buffer.max_capacity = 0;
-
-       dolog(LOG_DEBUG, "New domain %d", domid);
-
-       return dom;
-}
-
-static struct domain *lookup_domain(int domid)
-{
-       struct domain **pp;
-
-       for (pp = &dom_head; *pp; pp = &(*pp)->next) {
-               struct domain *dom = *pp;
-
-               if (dom->domid == domid) {
-                       return dom;
-               } else if (dom->domid > domid) {
-                       *pp = create_domain(domid);
-                       (*pp)->next = dom;
-                       return *pp;
-               }
-       }
-
-       *pp = create_domain(domid);
-       return *pp;
-}
-
-static void remove_domain(struct domain *dom)
-{
-       struct domain **pp;
-
-       dolog(LOG_DEBUG, "Removing domain-%d", dom->domid);
-
-       for (pp = &dom_head; *pp; pp = &(*pp)->next) {
-               struct domain *d = *pp;
-
-               if (dom->domid == d->domid) {
-                       *pp = d->next;
-                       if (d->buffer.data) {
-                               free(d->buffer.data);
-                       }
-                       free(d);
-                       break;
-               }
-       }
-}
-
-static void handle_tty_read(struct domain *dom)
-{
-       ssize_t len;
-       xcs_msg_t msg;
-
-       msg.type = XCS_REQUEST;
-       msg.u.control.remote_dom = dom->domid;
-       msg.u.control.msg.type = CMSG_CONSOLE;
-       msg.u.control.msg.subtype = CMSG_CONSOLE_DATA;
-       msg.u.control.msg.id = 1;
-
-       len = read(dom->tty_fd, msg.u.control.msg.msg, 60);
-       if (len < 1) {
-               close(dom->tty_fd);
-
-               if (domain_is_valid(dom->domid)) {
-                       dom->tty_fd = domain_create_tty(dom);
-               } else {
-                       remove_domain(dom);
-               }
-       } else if (domain_is_valid(dom->domid)) {
-               msg.u.control.msg.length = len;
-
-               if (!write_sync(xcs_data_fd, &msg, sizeof(msg))) {
-                       dolog(LOG_ERR, "Write to xcs failed: %m");
-               }
-       } else {
-               close(dom->tty_fd);
-               remove_domain(dom);
-       }
-}
-
-static void handle_tty_write(struct domain *dom)
-{
-       ssize_t len;
-
-       len = write(dom->tty_fd, dom->buffer.data, dom->buffer.size);
-       if (len < 1) {
-               close(dom->tty_fd);
-
-               if (domain_is_valid(dom->domid)) {
-                       dom->tty_fd = domain_create_tty(dom);
-               } else {
-                       remove_domain(dom);
-               }
-       } else {
-               buffer_advance(&dom->buffer, len);
-       }
-}
-
-static void handle_xcs_msg(int fd)
-{
-       xcs_msg_t msg;
-
-       if (!read_sync(fd, &msg, sizeof(msg))) {
-               dolog(LOG_ERR, "read from xcs failed! %m");
-       } else if (msg.type == XCS_REQUEST) {
-               struct domain *dom;
-
-               dom = lookup_domain(msg.u.control.remote_dom);
-               buffer_append(&dom->buffer,
-                             msg.u.control.msg.msg,
-                             msg.u.control.msg.length);
-       }
-}
-
-static void enum_domains(void)
-{
-       int domid = 0;
-       xc_dominfo_t dominfo;
-
-       while (xc_domain_getinfo(xc, domid, 1, &dominfo) == 1) {
-               lookup_domain(dominfo.domid);
-               domid = dominfo.domid + 1;
-       }
-}
-
-void handle_io(void)
-{
-       fd_set readfds, writefds;
-       int ret;
-       int max_fd = -1;
-       int num_of_writes = 0;
-
-       do {
-               struct domain *d;
-               struct timeval tv = { 1, 0 };
-
-               FD_ZERO(&readfds);
-               FD_ZERO(&writefds);
-
-               FD_SET(xcs_data_fd, &readfds);
-               max_fd = MAX(xcs_data_fd, max_fd);
-
-               for (d = dom_head; d; d = d->next) {
-                       if (d->tty_fd != -1) {
-                               FD_SET(d->tty_fd, &readfds);
-                       }
-
-                       if (d->tty_fd != -1 && !buffer_empty(&d->buffer)) {
-                               FD_SET(d->tty_fd, &writefds);
-                       }
-
-                       max_fd = MAX(d->tty_fd, max_fd);
-               }
-
-               ret = select(max_fd + 1, &readfds, &writefds, 0, &tv);
-               if (tv.tv_sec == 1 && (++num_of_writes % 100) == 0) {
-                       /* FIXME */
-                       /* This is a nasty hack.  xcs does not handle the
-                          control channels filling up well at all.  We'll
-                          throttle ourselves here since we do proper
-                          queueing to give the domains a shot at pulling out
-                          the data.  Fixing xcs is not worth it as it's
-                          going away */
-                       tv.tv_usec = 1000;
-                       select(0, 0, 0, 0, &tv);
-               }
-               enum_domains();
-
-               if (FD_ISSET(xcs_data_fd, &readfds)) {
-                       handle_xcs_msg(xcs_data_fd);
-               }
-
-               for (d = dom_head; d; d = d->next) {
-                       if (FD_ISSET(d->tty_fd, &readfds)) {
-                               handle_tty_read(d);
-                       }
-
-                       if (FD_ISSET(d->tty_fd, &writefds)) {
-                               handle_tty_write(d);
-                       }
-               }
-       } while (ret > -1);
-}
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/io.h
--- a/tools/consoled/io.h       Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,26 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  Xen Console Daemon
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#ifndef CONSOLED_IO_H
-#define CONSOLED_IO_H
-
-void handle_io(void);
-
-#endif
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/main.c
--- a/tools/consoled/main.c     Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,93 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  Xen Console Daemon
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#include <getopt.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-#include "xc.h"
-#include "xen/io/domain_controller.h"
-#include "xcs_proto.h"
-
-#include "utils.h"
-#include "io.h"
-
-int main(int argc, char **argv)
-{
-       const char *sopts = "hVvi";
-       struct option lopts[] = {
-               { "help", 0, 0, 'h' },
-               { "version", 0, 0, 'V' },
-               { "verbose", 0, 0, 'v' },
-               { "interactive", 0, 0, 'i' },
-               { 0 },
-       };
-       bool is_interactive = false;
-       int ch;
-       int syslog_option = LOG_CONS;
-       int syslog_mask = LOG_WARNING;
-       int opt_ind = 0;
-
-       while ((ch = getopt_long(argc, argv, sopts, lopts, &opt_ind)) != -1) {
-               switch (ch) {
-               case 'h':
-                       //usage(argv[0]);
-                       exit(0);
-               case 'V':
-                       //version(argv[0]);
-                       exit(0);
-               case 'v':
-                       syslog_option |= LOG_PERROR;
-                       syslog_mask = LOG_DEBUG;
-                       break;
-               case 'i':
-                       is_interactive = true;
-                       break;
-               case '?':
-                       fprintf(stderr,
-                               "Try `%s --help' for more information\n",
-                               argv[0]);
-                       exit(EINVAL);
-               }
-       }
-
-       if (geteuid() != 0) {
-               fprintf(stderr, "%s requires root to run.\n", argv[0]);
-               exit(EPERM);
-       }
-
-       openlog("consoled", syslog_option, LOG_DAEMON);
-       setlogmask(syslog_mask);
-
-       if (!is_interactive) {
-               daemonize("/var/run/consoled.pid");
-       }
-
-       xen_setup();
-
-       handle_io();
-
-       closelog();
-
-       return 0;
-}
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/testsuite/Makefile
--- a/tools/consoled/testsuite/Makefile Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,11 +0,0 @@
-CFLAGS=-g -Wall
-CC=gcc
-LDFLAGS=-static
-
-all: console-dom0 console-domU procpipe
-
-console-dom0: console-dom0.o
-console-domU: console-domU.o
-procpipe: procpipe.o
-
-clean:; $(RM) *.o console-domU console-dom0 procpipe
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/testsuite/README
--- a/tools/consoled/testsuite/README   Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,29 +0,0 @@
-ABOUT
-
-This tool uses two programs, one that lives in dom0 and one that lives in domU
-to verify that no data is lost.  dom0 and domU share a handshake with each
-other that they use to exchange a random seed.
-
-Both programs then generate a series of random numbers and then writes and
-reads the numbers via the console.  Because each side starts with the same seed
-they know what data the other side is generating and therefore what should be
-expected.
-
-RUNNNING
-
-console-domU should be installed within the guest image.  It must be launched
-from the client automatically.  I use a custom initrd image and put it in the
-/linuxrc.
-
-console-dom0 and console-domU will communicate with each other and stress the
-console code.  You can verify it at various levels by invoking it in different
-ways.  procpipe is used to connect the two.  I use the following command for
-testing:
-
-./procpipe ./console-dom0 'xm create -c /etc/xen/xmexample1'
-
-xmexample1 has no devices and no root set (this is what triggers /linuxrc).
-
-If it freezes, it probably means that console-domU is expecting more data from
-console-dom0 (which means that some data got dropped).  I'd like to add
-timeouts in the future to handle this more gracefully.
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/testsuite/console-dom0.c
--- a/tools/consoled/testsuite/console-dom0.c   Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,117 +0,0 @@
-/* Written by Anthony Liguori <aliguori@xxxxxxxxxx> */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <string.h>
-#include <unistd.h>
-#include <termios.h>
-
-#define MIN(a, b) (((a) < (b)) ? (a) : (b))
-
-static void generate_random_buffer(char *buffer, size_t size)
-{
-       int i;
-
-       for (i = 0; i < size; i++) {
-               buffer[i] = random() & 0xFF;
-       }
-}
-
-static void canonicalize(char *buffer)
-{
-       char *reader, *writer;
-
-       reader = writer = buffer;
-
-       while (*reader) {
-               *writer = *reader;
-               if (*reader != '\r') writer++;
-               reader++;
-       }
-       *writer = *reader;
-}
-
-int main(int argc, char **argv)
-{
-       char buffer[4096];
-       char *line;
-       unsigned int seed;
-       size_t size;
-       int runs;
-       unsigned long long total_bytes = 0;
-       struct termios term;
-
-       tcgetattr(STDIN_FILENO, &term);
-       cfmakeraw(&term);
-       tcsetattr(STDIN_FILENO, TCSAFLUSH, &term);
-
-       tcgetattr(STDOUT_FILENO, &term);
-       cfmakeraw(&term);
-       tcsetattr(STDOUT_FILENO, TCSAFLUSH, &term);
-
-       while ((line = fgets(buffer, sizeof(buffer), stdin))) {
-               canonicalize(line);
-
-               if (strcmp(line, "!!!XEN Test Begin!!!\n") == 0) {
-                       break;
-               } else {
-                       fprintf(stderr, "%s", line);
-               }
-       }
-
-       if (line == NULL) {
-               fprintf(stderr, "Client never sent start string.\n");
-               return 1;
-       }
-
-       seed = time(0);
-
-       printf("%u\n", seed); fflush(stdout);
-
-       fprintf(stderr, "Waiting for seed acknowledgement\n");
-       line = fgets(buffer, sizeof(buffer), stdin);
-       if (line == NULL) {
-               fprintf(stderr, "Client never acknowledge seed.\n");
-               return 1;
-       }
-
-       canonicalize(line);
-       if (strcmp(line, "Seed Okay.\n") != 0) {
-               fprintf(stderr, "Incorrect seed acknowledgement.\n");
-               fprintf(stderr, "[%s]", line);
-               return 1;
-       } else {
-               fprintf(stderr, "Processed seed.\n");
-       }
-
-       srandom(seed);
-
-       for (runs = (random() % 100000) + 4096; runs > 0; runs--) {
-
-               size = random() % 4096;
-
-               fprintf(stderr, "Writing %d bytes.\n", size);
-
-               generate_random_buffer(buffer, size);
-               fwrite(buffer, size, 1, stdout);
-               fflush(stdout);
-
-               do {
-                       line = fgets(buffer, sizeof(buffer), stdin);
-                       if (line == NULL) {
-                               fprintf(stderr, "Premature EOF from client.\n");
-                               return 1;
-                       }
-
-                       canonicalize(line);
-                       fprintf(stderr, "%s", line);
-               } while (strcmp(line, "Okay.\n") != 0);
-
-               total_bytes += size;
-       }
-
-       fprintf(stderr, "PASS: processed %llu byte(s).\n", total_bytes);
-
-       return 0;
-}
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/testsuite/console-domU.c
--- a/tools/consoled/testsuite/console-domU.c   Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,76 +0,0 @@
-/* Written by Anthony Liguori <aliguori@xxxxxxxxxx> */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <termios.h>
-#include <unistd.h>
-
-static void canonicalize(char *buffer)
-{
-       char *reader, *writer;
-
-       reader = writer = buffer;
-
-       while (*reader) {
-               *writer = *reader;
-               if (*reader != '\r') writer++;
-               reader++;
-       }
-       *writer = *reader;
-}
-
-int main(int argc, char **argv)
-{
-       char buffer[4096];
-       char *line;
-       unsigned int seed;
-       size_t size;
-       int i;
-       int runs;
-       struct termios term;
-
-       tcgetattr(STDIN_FILENO, &term);
-       cfmakeraw(&term);
-       tcsetattr(STDIN_FILENO, TCSAFLUSH, &term);
-
-       tcgetattr(STDOUT_FILENO, &term);
-       cfmakeraw(&term);
-       tcsetattr(STDOUT_FILENO, TCSAFLUSH, &term);
-
-       printf("!!!XEN Test Begin!!!\n"); fflush(stdout);
-       line = fgets(buffer, sizeof(buffer), stdin);
-       if (line == NULL) {
-               printf("Failure\n"); fflush(stdout);
-               return 1;
-       }
-
-       canonicalize(line);
-       seed = strtoul(line, 0, 0);
-
-       printf("Seed Okay.\n"); fflush(stdout);
-
-       srandom(seed);
-
-       for (runs = (random() % 100000) + 4096; runs > 0; runs--) {
-               size = random() % 4096;
-
-               for (i = 0; i < size; i++) {
-                       int ch;
-                       int exp;
-
-                       ch = fgetc(stdin);
-                       exp = random() & 0xFF;
-                       if (ch != exp) {
-                               printf("Expected %d got %d\n",
-                                      exp, ch);
-                               fflush(stdout);
-                       }
-                       printf("Got %d/%d good bytes\n", i, size);
-               }
-               
-               printf("Okay.\n"); fflush(stdout);
-       }
-
-       return 0;
-}
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/testsuite/procpipe.c
--- a/tools/consoled/testsuite/procpipe.c       Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,133 +0,0 @@
-/* Written by Anthony Liguori <aliguori@xxxxxxxxxx> */
-
-#include <stdio.h>
-#include <getopt.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <err.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#define PACKAGE_NAME "procpipe"
-#define PACKAGE_VERSION "0.0.1"
-
-#define GPL_SHORT \
-"This is free software; see the source for copying conditions.  There is NO\n"\
-"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-#define PACKAGE_BUGS "aliguori@xxxxxxxxxx"
-#define PACKAGE_AUTHOR "Anthony Liguori"
-#define PACKAGE_OWNER "IBM, Corp."
-#define PACKAGE_LICENSE GPL_SHORT
-
-static void usage(const char *name)
-{
-       printf("Usage: %s [OPTIONS]\n"
-              "\n"
-              "  -h, --help      display this help and exit\n"
-              "  -V, --version   output version information and exit\n"
-              "\n"
-              "Report bugs to <%s>.\n"
-              , name, PACKAGE_BUGS);
-}
-
-static void version(const char *name)
-{
-       printf("%s (%s) %s\n"
-              "Written by %s.\n"
-              "\n"
-              "Copyright (C) 2005 %s.\n"
-              "%s\n"
-              , name, PACKAGE_NAME, PACKAGE_VERSION,
-              PACKAGE_AUTHOR, PACKAGE_OWNER, PACKAGE_LICENSE);
-}
-
-static pid_t exec(int stdout, int stdin, const char *cmd)
-{
-       pid_t pid;
-
-       pid = fork();
-       if (pid == 0) {
-               close(STDOUT_FILENO);
-               dup2(stdout, STDOUT_FILENO);
-               close(STDIN_FILENO);
-               dup2(stdin, STDIN_FILENO);
-
-               execlp("/bin/sh", "sh", "-c", cmd, NULL);
-       }
-
-       return pid;
-}
-
-int main(int argc, char **argv)
-{
-       int ch, opt_ind = 0;
-       const char *sopt = "hV";
-       struct option lopt[] = {
-               { "help", 0, 0, 'h' },
-               { "version", 0, 0, 'V' },
-               { 0 }
-       };
-       int host_stdout[2];
-       int host_stdin[2];
-       int res;
-       pid_t pid1, pid2;
-       int status;
-
-       while ((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) {
-               switch (ch) {
-               case 'h':
-                       usage(argv[0]);
-                       exit(0);
-               case 'V':
-                       version(argv[0]);
-                       exit(0);
-               case '?':
-                       errx(EINVAL, "Try `%s --help' for more information.",
-                            argv[0]);
-               }
-       }
-
-       if ((argc - optind) != 2) {
-               errx(EINVAL, "Two commands are required.\n"
-                    "Try `%s --help' for more information.", argv[0]);
-       }
-
-       res = pipe(host_stdout);
-       if (res == -1) {
-               err(errno, "pipe() failed");
-       }
-
-       res = pipe(host_stdin);
-       if (res == -1) {
-               err(errno, "pipe() failed");
-       }
-
-       pid1 = exec(host_stdout[1], host_stdin[0], argv[optind]);
-       if (pid1 == -1) {
-               err(errno, "exec(%s)", argv[optind]);
-       }
-
-       pid2 = exec(host_stdin[1], host_stdout[0], argv[optind + 1]);
-       if (pid2 == -1) {
-               err(errno, "exec(%s)", argv[optind + 1]);
-       }
-
-       waitpid(pid1, &status, 0);
-       if (WIFEXITED(status)) status = WEXITSTATUS(status);
-
-       if (status != 0) {
-               printf("Child exited with status %d\n", status);
-       }
-
-       waitpid(pid2, &status, 0);
-       if (WIFEXITED(status)) status = WEXITSTATUS(status);
-
-       if (status != 0) {
-               printf("Child2 exited with status %d\n", status);
-       }
-
-       return 0;
-}
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/utils.c
--- a/tools/consoled/utils.c    Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,251 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  Xen Console Daemon
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <err.h>
-#include <errno.h>
-#include <stdio.h>
-#include <getopt.h>
-#include <stdbool.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <string.h>
-
-#include "xc.h"
-#include "xen/io/domain_controller.h"
-#include "xcs_proto.h"
-
-#include "utils.h"
-
-struct xs_handle *xs;
-int xc;
-
-int xcs_ctrl_fd = -1;
-int xcs_data_fd = -1;
-
-bool _read_write_sync(int fd, void *data, size_t size, bool do_read)
-{
-       size_t offset = 0;
-       ssize_t len;
-
-       while (offset < size) {
-               if (do_read) {
-                       len = read(fd, data + offset, size - offset);
-               } else {
-                       len = write(fd, data + offset, size - offset);
-               }
-
-               if (len < 1) {
-                       if (len == -1 && (errno == EAGAIN || errno == EINTR)) {
-                               return false;
-                       }
-               } else {
-                       offset += len;
-               }
-       }
-
-       return true;
-}
-
-static int open_domain_socket(const char *path)
-{
-       struct sockaddr_un addr;
-       int sock;
-       size_t addr_len;
-
-       if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) == -1) {
-               goto out;
-       }
-
-       addr.sun_family = AF_UNIX;
-       strcpy(addr.sun_path, path);
-       addr_len = sizeof(addr.sun_family) + strlen(XCS_SUN_PATH) + 1;
-
-       if (connect(sock, (struct sockaddr *)&addr, addr_len) == -1) {
-               goto out_close_sock;
-       }
-
-       return sock;
-
- out_close_sock:
-       close(sock);
- out:
-       return -1;
-}
-
-static void child_exit(int sig)
-{
-       while (waitpid(-1, NULL, WNOHANG) > 0);
-}
-
-void daemonize(const char *pidfile)
-{
-       pid_t pid;
-       int fd;
-       int len;
-       int i;
-       char buf[100];
-
-       if (getppid() == 1) {
-               return;
-       }
-
-       if ((pid = fork()) > 0) {
-               exit(0);
-       } else if (pid == -1) {
-               err(errno, "fork() failed");
-       }
-
-       setsid();
-
-       /* redirect fd 0,1,2 to /dev/null */
-       if ((fd = open("/dev/null",O_RDWR)) == -1) {
-               exit(1);
-       }
-
-       for (i = 0; i <= 2; i++) {
-               close(i);
-               dup2(fd, i);
-       }
-
-       close(fd);
-
-       umask(027);
-       chdir("/");
-
-       fd = open(pidfile, O_RDWR | O_CREAT);
-       if (fd == -1) {
-               exit(1);
-       }
-
-       if (lockf(fd, F_TLOCK, 0) == -1) {
-               exit(1);
-       }
-
-       len = sprintf(buf, "%d\n", getpid());
-       write(fd, buf, len);
-
-       signal(SIGCHLD, child_exit);
-       signal(SIGTSTP, SIG_IGN);
-       signal(SIGTTOU, SIG_IGN);
-       signal(SIGTTIN, SIG_IGN);
-}
-
-/* synchronized send/recv strictly for setting up xcs */
-/* always use asychronize callbacks any other time */
-static bool xcs_send_recv(int fd, xcs_msg_t *msg)
-{
-       bool ret = false;
-
-       if (!write_sync(fd, msg, sizeof(*msg))) {
-               dolog(LOG_ERR, "Write failed at %s:%s():L%d?  Possible bug.",
-                      __FILE__, __FUNCTION__, __LINE__);
-               goto out;
-       }
-
-       if (!read_sync(fd, msg, sizeof(*msg))) {
-               dolog(LOG_ERR, "Read failed at %s:%s():L%d?  Possible bug.",
-                      __FILE__, __FUNCTION__, __LINE__);
-               goto out;
-       }
-
-       ret = true;
-
- out:
-       return ret;
-}
-
-bool xen_setup(void)
-{
-       int sock;
-       xcs_msg_t msg;
-       
-       xs = xs_daemon_open();
-       if (xs == NULL) {
-               dolog(LOG_ERR,
-                     "Failed to contact xenstore (%m).  Is it running?");
-               goto out;
-       }
-
-       xc = xc_interface_open();
-       if (xc == -1) {
-               dolog(LOG_ERR, "Failed to contact hypervisor (%m)");
-               goto out;
-       }
-
-       sock = open_domain_socket(XCS_SUN_PATH);
-       if (sock == -1) {
-               dolog(LOG_ERR, "Failed to contact xcs (%m).  Is it running?");
-               goto out_close_store;
-       }
-
-       xcs_ctrl_fd = sock;
-
-       sock = open_domain_socket(XCS_SUN_PATH);
-       if (sock == -1) {
-               dolog(LOG_ERR, "Failed to contact xcs (%m).  Is it running?");
-               goto out_close_ctrl;
-       }
-       
-       xcs_data_fd = sock;
-
-       memset(&msg, 0, sizeof(msg));
-       msg.type = XCS_CONNECT_CTRL;
-       if (!xcs_send_recv(xcs_ctrl_fd, &msg) || msg.result != XCS_RSLT_OK) {
-               dolog(LOG_ERR, "xcs control connect failed.  Possible bug.");
-               goto out_close_data;
-       }
-
-       msg.type = XCS_CONNECT_DATA;
-       if (!xcs_send_recv(xcs_data_fd, &msg) || msg.result != XCS_RSLT_OK) {
-               dolog(LOG_ERR, "xcs data connect failed.  Possible bug.");
-               goto out_close_data;
-       }
-
-       /* Since the vast majority of control messages are console messages
-          it's just easier to ignore other messages that try to bind to 
-          a specific type. */
-       msg.type = XCS_MSG_BIND;
-       msg.u.bind.port = PORT_WILDCARD;
-       msg.u.bind.type = TYPE_WILDCARD;
-       if (!xcs_send_recv(xcs_ctrl_fd, &msg) || msg.result != XCS_RSLT_OK) {
-               dolog(LOG_ERR, "xcs vind failed.  Possible bug.");
-               goto out_close_data;
-       }
-       
-       return true;
-
- out_close_data:
-       close(xcs_ctrl_fd);
-       xcs_data_fd = -1;
- out_close_ctrl:
-       close(xcs_ctrl_fd);
-       xcs_ctrl_fd = -1;
- out_close_store:
-       xs_daemon_close(xs);
- out:
-       return false;
-}
-
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/utils.h
--- a/tools/consoled/utils.h    Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,47 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  Xen Console Daemon
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#ifndef CONSOLED_UTILS_H
-#define CONSOLED_UTILS_H
-
-#include <stdbool.h>
-#include <syslog.h>
-#include <stdio.h>
-
-#include "xs.h"
-
-void daemonize(const char *pidfile);
-bool xen_setup(void);
-#define read_sync(fd, buffer, size) _read_write_sync(fd, buffer, size, true)
-#define write_sync(fd, buffer, size) _read_write_sync(fd, buffer, size, false)
-bool _read_write_sync(int fd, void *data, size_t size, bool do_read);
-
-extern int xcs_ctrl_fd;
-extern int xcs_data_fd;
-extern struct xs_handle *xs;
-extern int xc;
-
-#if 1
-#define dolog(val, fmt, ...) syslog(val, fmt, ## __VA_ARGS__)
-#else
-#define dolog(val, fmt, ...) fprintf(stderr, fmt "\n", ## __VA_ARGS__)
-#endif
-
-#endif
diff -r 6721c8cd1a30 -r ec1878b6956e tools/consoled/xc_console.c
--- a/tools/consoled/xc_console.c       Sun Aug  7 08:56:57 2005
+++ /dev/null   Sun Aug  7 09:12:55 2005
@@ -1,228 +0,0 @@
-/*\
- *  Copyright (C) International Business Machines  Corp., 2005
- *  Author(s): Anthony Liguori <aliguori@xxxxxxxxxx>
- *
- *  Xen Console Daemon
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; under version 2 of the License.
- * 
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- * 
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-\*/
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <errno.h>
-#include <stdlib.h>
-#include <time.h>
-#include <fcntl.h>
-#include <sys/wait.h>
-#include <termios.h>
-#include <signal.h>
-#include <getopt.h>
-#include <sys/select.h>
-#include <err.h>
-#include <errno.h>
-#include <pty.h>
-
-#include "xc.h"
-#include "xs.h"
-
-#define ESCAPE_CHARACTER 0x1d
-
-static volatile sig_atomic_t received_signal = 0;
-
-static void sighandler(int signum)
-{
-       received_signal = 1;
-}
-
-static bool write_sync(int fd, const void *data, size_t size)
-{
-       size_t offset = 0;
-       ssize_t len;
-
-       while (offset < size) {
-               len = write(fd, data + offset, size - offset);
-               if (len < 1) {
-                       return false;
-               }
-               offset += len;
-       }
-
-       return true;
-}
-
-static void usage(const char *program) {
-       printf("Usage: %s [OPTION] DOMID\n"
-              "Attaches to a virtual domain console\n"
-              "\n"
-              "  -h, --help       display this help and exit\n"
-              , program);
-}
-
-/* don't worry too much if setting terminal attributes fail */
-static void init_term(int fd, struct termios *old)
-{
-       struct termios new_term;
-
-       if (tcgetattr(fd, old) == -1) {
-               return;
-       }
-
-       new_term = *old;
-       cfmakeraw(&new_term);
-
-       tcsetattr(fd, TCSAFLUSH, &new_term);
-}
-
-static void restore_term(int fd, struct termios *old)
-{
-       tcsetattr(fd, TCSAFLUSH, old);
-}
-
-static int console_loop(int xc_handle, domid_t domid, int fd)
-{
-       int ret;
-
-       do {
-               fd_set fds;
-
-               FD_ZERO(&fds);
-               FD_SET(STDIN_FILENO, &fds);
-               FD_SET(fd, &fds);
-
-               ret = select(fd + 1, &fds, NULL, NULL, NULL);
-               if (ret == -1) {
-                       if (errno == EINTR || errno == EAGAIN) {
-                               continue;
-                       }
-                       return -1;
-               }
-
-               if (FD_ISSET(STDIN_FILENO, &fds)) {
-                       ssize_t len;
-                       char msg[60];
-
-                       len = read(STDIN_FILENO, msg, sizeof(msg));
-                       if (len == 1 && msg[0] == ESCAPE_CHARACTER) {
-                               return 0;
-                       } 
-
-                       if (len == 0 || len == -1) {
-                               if (len == -1 &&
-                                   (errno == EINTR || errno == EAGAIN)) {
-                                       continue;
-                               }
-                               return -1;
-                       }
-
-                       if (!write_sync(fd, msg, len)) {
-                               perror("write() failed");
-                               return -1;
-                       }
-               }
-
-               if (FD_ISSET(fd, &fds)) {
-                       ssize_t len;
-                       char msg[512];
-
-                       len = read(fd, msg, sizeof(msg));
-                       if (len == 0 || len == -1) {
-                               if (len == -1 &&
-                                   (errno == EINTR || errno == EAGAIN)) {
-                                       continue;
-                               }
-                               return -1;
-                       }
-
-                       if (!write_sync(STDOUT_FILENO, msg, len)) {
-                               perror("write() failed");
-                               return -1;
-                       }
-               }
-       } while (received_signal == 0);
-
-       return 0;
-}
-
-int main(int argc, char **argv)
-{
-       struct termios attr;
-       int domid;
-       int xc_handle;
-       char *sopt = "hf:pc";
-       int ch;
-       int opt_ind=0;
-       struct option lopt[] = {
-               { "help",    0, 0, 'h' },
-               { "file",    1, 0, 'f' },
-               { "pty",     0, 0, 'p' },
-               { "ctty",    0, 0, 'c' },
-               { 0 },
-
-       };
-       char *str_pty;
-       char path[1024];
-       int spty;
-       unsigned int len = 0;
-       struct xs_handle *xs;
-
-       while((ch = getopt_long(argc, argv, sopt, lopt, &opt_ind)) != -1) {
-               switch(ch) {
-               case 'h':
-                       usage(argv[0]);
-                       exit(0);
-                       break;
-               }
-       }
-       
-       if ((argc - optind) != 1) {
-               fprintf(stderr, "Invalid number of arguments\n");
-               fprintf(stderr, "Try `%s --help' for more information.\n", 
-                       argv[0]);
-               exit(EINVAL);
-       }
-       
-       domid = atoi(argv[optind]);
-
-       xs = xs_daemon_open();
-       if (xs == NULL) {
-               err(errno, "Could not contact XenStore");
-       }
-
-       xc_handle = xc_interface_open();
-       if (xc_handle == -1) {
-               err(errno, "xc_interface_open()");
-       }
-       
-       signal(SIGTERM, sighandler);
-
-       snprintf(path, sizeof(path), "/console/%d/tty", domid);
-       str_pty = xs_read(xs, path, &len);
-       if (str_pty == NULL) {
-               err(errno, "Could not read tty from store");
-       }
-       spty = open(str_pty, O_RDWR | O_NOCTTY);
-       if (spty == -1) {
-               err(errno, "Could not open tty `%s'", str_pty);
-       }
-       free(str_pty);
-
-       init_term(STDIN_FILENO, &attr);
-       console_loop(xc_handle, domid, spty);
-       restore_term(STDIN_FILENO, &attr);
-
-       return 0;
- }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.