WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-tools

[Xen-tools] Re: [PATCH] Remove xs_write flags

To: Rusty Russell <rusty@xxxxxxxxxxxxxxx>
Subject: [Xen-tools] Re: [PATCH] Remove xs_write flags
From: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
Date: Mon, 19 Sep 2005 15:36:25 +0100
Cc: Xen Tools <xen-tools@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Mon, 19 Sep 2005 14:34:00 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1126916151.29203.10.camel@xxxxxxxxxxxxxxxxxxxxx>
List-help: <mailto:xen-tools-request@lists.xensource.com?subject=help>
List-id: Xen control tools developers <xen-tools.lists.xensource.com>
List-post: <mailto:xen-tools@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-tools>, <mailto:xen-tools-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-tools>, <mailto:xen-tools-request@lists.xensource.com?subject=unsubscribe>
References: <1126916151.29203.10.camel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-tools-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.4.1i
Thanks!

On Sat, Sep 17, 2005 at 10:15:51AM +1000, Rusty Russell wrote:
> # HG changeset patch
> # User Rusty Russell <rusty@xxxxxxxxxxxxxxx>
> # Node ID a678d0c04c92a555cc8e592a51ed294e5cc9c021
> # Parent  90b4e122d3407c7d0e28e6391ca89d46d5a81e52
> Remove iflag argument to xs_write
> xs_write with O_CREAT|O_EXCL causes problems over daemon restarts, since it's 
> not idempotent.
> It turns out noone really needs the flags word at all, so get rid of it.  
> It's now as if everyone specified "O_CREAT".
> 
> diff -r 90b4e122d340 -r a678d0c04c92 tools/blktap/xenbus.c
> --- a/tools/blktap/xenbus.c   Fri Sep 16 05:01:11 2005
> +++ b/tools/blktap/xenbus.c   Fri Sep 16 06:46:15 2005
> @@ -92,7 +92,7 @@
>          if ((path == NULL) || (buf == NULL))
>              return 0;
>  
> -        ret = xs_write(h, path, buf, strlen(buf)+1, O_CREAT);
> +        ret = xs_write(h, path, buf, strlen(buf)+1);
>  
>          free(buf);
>          free(path);
> diff -r 90b4e122d340 -r a678d0c04c92 tools/console/daemon/io.c
> --- a/tools/console/daemon/io.c       Fri Sep 16 05:01:11 2005
> +++ b/tools/console/daemon/io.c       Fri Sep 16 06:46:15 2005
> @@ -165,7 +165,7 @@
>               success = asprintf(&path, "%s/tty", dom->conspath) != -1;
>               if (!success)
>                       goto out;
> -             success = xs_write(xs, path, slave, strlen(slave), O_CREAT);
> +             success = xs_write(xs, path, slave, strlen(slave));
>               free(path);
>               if (!success)
>                       goto out;
> diff -r 90b4e122d340 -r a678d0c04c92 tools/python/xen/lowlevel/xs/xs.c
> --- a/tools/python/xen/lowlevel/xs/xs.c       Fri Sep 16 05:01:11 2005
> +++ b/tools/python/xen/lowlevel/xs/xs.c       Fri Sep 16 06:46:15 2005
> @@ -116,8 +116,6 @@
>       "Write data to a path.\n"                               \
>       " path   [string] : xenstore path to write to\n."       \
>       " data   [string] : data to write.\n"                   \
> -     " create [int]    : create flag, default 0.\n"          \
> -     " excl   [int]    : exclusive flag, default 0.\n"       \
>       "\n"                                                    \
>       "Returns None on success.\n"                            \
>       "Raises RuntimeError on error.\n"                       \
> @@ -125,30 +123,23 @@
>  
>  static PyObject *xspy_write(PyObject *self, PyObject *args, PyObject *kwds)
>  {
> -    static char *kwd_spec[] = { "path", "data", "create", "excl", NULL };
> -    static char *arg_spec = "ss#|ii";
> +    static char *kwd_spec[] = { "path", "data", NULL };
> +    static char *arg_spec = "ss#";
>      char *path = NULL;
>      char *data = NULL;
>      int data_n = 0;
> -    int create = 0;
> -    int excl = 0;
> -
> -    struct xs_handle *xh = xshandle(self);
> -    PyObject *val = NULL;
> -    int flags = 0;
> +
> +    struct xs_handle *xh = xshandle(self);
> +    PyObject *val = NULL;
>      int xsval = 0;
>  
>      if (!xh)
>          goto exit;
>      if (!PyArg_ParseTupleAndKeywords(args, kwds, arg_spec, kwd_spec,
> -                                     &path, &data, &data_n, &create, &excl))
> -        goto exit;
> -    if (create)
> -        flags |= O_CREAT;
> -    if (excl)
> -        flags |= O_EXCL;
> -    Py_BEGIN_ALLOW_THREADS
> -    xsval = xs_write(xh, path, data, data_n, flags);
> +                                     &path, &data, &data_n))
> +        goto exit;
> +    Py_BEGIN_ALLOW_THREADS
> +    xsval = xs_write(xh, path, data, data_n);
>      Py_END_ALLOW_THREADS
>      if (!xsval) {
>          PyErr_SetFromErrno(PyExc_RuntimeError);
> diff -r 90b4e122d340 -r a678d0c04c92 tools/python/xen/xend/xenstore/xsnode.py
> --- a/tools/python/xen/xend/xenstore/xsnode.py        Fri Sep 16 05:01:11 2005
> +++ b/tools/python/xen/xend/xenstore/xsnode.py        Fri Sep 16 06:46:15 2005
> @@ -255,7 +255,7 @@
>              if x == "": continue
>              p = os.path.join(p, x)
>              if not self.exists(p):
> -                self.getxs().write(p, "", create=True)
> +                self.getxs().write(p, "")
>  
>      def read(self, path):
>          try:
> @@ -266,13 +266,12 @@
>              else:
>                  raise
>  
> -    def create(self, path, excl=False):
> -        self.write(path, "", create=True, excl=excl)
> -
> -    def write(self, path, data, create=True, excl=False):
> -        self.mkdirs(path)
> -        try:
> -            self.getxs().write(path, data, create=create, excl=excl)
> +    def create(self, path):
> +        self.write(path, "")
> +
> +    def write(self, path, data):
> +        try:
> +            self.getxs().write(path, data)
>          except Exception, ex:
>              raise
>  
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/python/xen/xend/xenstore/xstransact.py
> --- a/tools/python/xen/xend/xenstore/xstransact.py    Fri Sep 16 05:01:11 2005
> +++ b/tools/python/xen/xend/xenstore/xstransact.py    Fri Sep 16 06:46:15 2005
> @@ -53,13 +53,11 @@
>              ret.append(self._read(key))
>          return ret
>  
> -    def _write(self, key, data, create=True, excl=False):
> -        path = "%s/%s" % (self.path, key)
> -        xshandle().write(path, data, create=create, excl=excl)
> +    def _write(self, key, data):
> +        path = "%s/%s" % (self.path, key)
> +        xshandle().write(path, data)
>  
>      def write(self, *args, **opts):
> -        create = opts.get('create') or True
> -        excl = opts.get('excl') or False
>          if len(args) == 0:
>              raise TypeError
>          if isinstance(args[0], dict):
> @@ -67,15 +65,15 @@
>                  if not isinstance(d, dict):
>                      raise TypeError
>                  for key in d.keys():
> -                    self._write(key, d[key], create, excl)
> +                    self._write(key, d[key])
>          elif isinstance(args[0], list):
>              for l in args:
>                  if not len(l) == 2:
>                      raise TypeError
> -                self._write(l[0], l[1], create, excl)
> +                self._write(l[0], l[1])
>          elif len(args) % 2 == 0:
>              for i in range(len(args) / 2):
> -                self._write(args[i * 2], args[i * 2 + 1], create, excl)
> +                self._write(args[i * 2], args[i * 2 + 1])
>          else:
>              raise TypeError
>  
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/01simple.test
> --- a/tools/xenstore/testsuite/01simple.test  Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/01simple.test  Fri Sep 16 06:46:15 2005
> @@ -1,4 +1,4 @@
>  # Create an entry, read it.
> -write /test create contents
> +write /test contents
>  expect contents
>  read /test
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/02directory.test
> --- a/tools/xenstore/testsuite/02directory.test       Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/02directory.test       Fri Sep 16 06:46:15 2005
> @@ -3,7 +3,7 @@
>  dir /
>  
>  # Create a file.
> -write /test create contents
> +write /test contents
>  
>  # Directory shows it.
>  expect test
> @@ -21,7 +21,7 @@
>  dir /dir
>  
>  # Create a file, check it exists.
> -write /dir/test2 create contents2
> +write /dir/test2 contents2
>  expect test2
>  dir /dir
>  expect contents2
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/03write.test
> --- a/tools/xenstore/testsuite/03write.test   Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/03write.test   Fri Sep 16 06:46:15 2005
> @@ -1,31 +1,20 @@
> -# Write without create fails.
> -expect write failed: No such file or directory
> -write /test none contents
> -
> -# Exclusive write succeeds
> -write /test excl contents
> +# Write succeeds
> +write /test contents
>  expect contents
>  read /test
>  
> -# Exclusive write fails to overwrite.
> -expect write failed: File exists
> -write /test excl contents
> -
> -# Non-exclusive overwrite succeeds.
> -write /test none contents2
> +# Overwrite succeeds.
> +write /test contents2
>  expect contents2
> -read /test
> -write /test create contents3
> -expect contents3
>  read /test
>  
>  # Write should implicitly create directories
> -write /dir/test create contents
> +write /dir/test contents
>  expect test
>  dir /dir
>  expect contents
>  read /dir/test
> -write /dir/1/2/3/4 excl contents4
> +write /dir/1/2/3/4 contents4
>  expect test
>  expect 1
>  dir /dir
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/04rm.test
> --- a/tools/xenstore/testsuite/04rm.test      Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/04rm.test      Fri Sep 16 06:46:15 2005
> @@ -4,7 +4,7 @@
>  rm /dir/test
>  
>  # Create file and remove it
> -write /test excl contents
> +write /test contents
>  rm /test
>  
>  # Create directory and remove it.
> @@ -13,5 +13,5 @@
>  
>  # Create directory, create file, remove all.
>  mkdir /dir
> -write /dir/test excl contents
> +write /dir/test contents
>  rm /dir
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/05filepermissions.test
> --- a/tools/xenstore/testsuite/05filepermissions.test Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/05filepermissions.test Fri Sep 16 06:46:15 2005
> @@ -5,7 +5,7 @@
>  getperm /dir/test
>  
>  # Create file: inherits from root (0 READ)
> -write /test excl contents
> +write /test contents
>  expect 0 READ
>  getperm /test
>  setid 1
> @@ -14,7 +14,7 @@
>  expect contents
>  read /test
>  expect write failed: Permission denied
> -write /test none contents
> +write /test contents
>  
>  # Take away read access to file.
>  setid 0
> @@ -25,7 +25,7 @@
>  expect read failed: Permission denied
>  read /test
>  expect write failed: Permission denied
> -write /test none contents
> +write /test contents
>  
>  # Grant everyone write access to file.
>  setid 0
> @@ -35,7 +35,7 @@
>  getperm /test
>  expect read failed: Permission denied
>  read /test
> -write /test none contents2
> +write /test contents2
>  setid 0
>  expect contents2
>  read /test
> @@ -47,7 +47,7 @@
>  getperm /test
>  expect contents2
>  read /test
> -write /test none contents3
> +write /test contents3
>  expect contents3
>  read /test
>  
> @@ -59,7 +59,7 @@
>  getperm /test
>  expect contents3
>  read /test
> -write /test none contents4
> +write /test contents4
>  
>  # User 2 can do nothing.
>  setid 2
> @@ -70,7 +70,7 @@
>  expect read failed: Permission denied
>  read /test
>  expect write failed: Permission denied
> -write /test none contents4
> +write /test contents4
>  
>  # Tools can always access things.
>  setid 0
> @@ -78,4 +78,4 @@
>  getperm /test
>  expect contents4
>  read /test
> -write /test none contents5
> +write /test contents5
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/06dirpermissions.test
> --- a/tools/xenstore/testsuite/06dirpermissions.test  Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/06dirpermissions.test  Fri Sep 16 06:46:15 2005
> @@ -11,7 +11,7 @@
>  getperm /dir
>  dir /dir
>  expect write failed: Permission denied
> -write /dir/test create contents2
> +write /dir/test contents2
>  
>  # Remove everyone's read access to directoy.
>  setid 0
> @@ -22,7 +22,7 @@
>  expect read failed: Permission denied
>  read /dir/test create contents2
>  expect write failed: Permission denied
> -write /dir/test create contents2
> +write /dir/test contents2
>  
>  # Grant everyone write access to directory.
>  setid 0
> @@ -32,7 +32,7 @@
>  getperm /dir
>  expect dir failed: Permission denied
>  dir /dir
> -write /dir/test create contents
> +write /dir/test contents
>  setid 0
>  expect 1 WRITE
>  getperm /dir/test
> @@ -47,7 +47,7 @@
>  getperm /dir
>  expect test
>  dir /dir
> -write /dir/test2 create contents
> +write /dir/test2 contents
>  expect contents
>  read /dir/test2
>  setperm /dir/test2 1 NONE
> @@ -60,7 +60,7 @@
>  expect test
>  expect test2
>  dir /dir
> -write /dir/test3 create contents
> +write /dir/test3 contents
>  
>  # User 2 can do nothing.  Can't even tell if file exists.
>  setid 2
> @@ -79,17 +79,9 @@
>  expect read failed: Permission denied
>  read /dir/test4
>  expect write failed: Permission denied
> -write /dir/test none contents
> +write /dir/test contents
>  expect write failed: Permission denied
> -write /dir/test create contents
> -expect write failed: Permission denied
> -write /dir/test excl contents
> -expect write failed: Permission denied
> -write /dir/test4 none contents
> -expect write failed: Permission denied
> -write /dir/test4 create contents
> -expect write failed: Permission denied
> -write /dir/test4 excl contents
> +write /dir/test4 contents
>  
>  # Tools can always access things.
>  setid 0
> @@ -99,13 +91,13 @@
>  expect test2
>  expect test3
>  dir /dir
> -write /dir/test4 create contents
> +write /dir/test4 contents
>  
>  # Inherited by child.
>  mkdir /dir/subdir
>  expect 1 NONE
>  getperm /dir/subdir
> -write /dir/subfile excl contents
> +write /dir/subfile contents
>  expect 1 NONE
>  getperm /dir/subfile
>  
> @@ -114,12 +106,12 @@
>  expect 2 READ/WRITE
>  getperm /dir/subdir
>  setid 3
> -write /dir/subdir/subfile excl contents
> +write /dir/subdir/subfile contents
>  expect 3 READ/WRITE
>  getperm /dir/subdir/subfile
>  
>  # Inheritence works through multiple directories, too.
> -write /dir/subdir/1/2/3/4 excl contents
> +write /dir/subdir/1/2/3/4 contents
>  expect 3 READ/WRITE
>  getperm /dir/subdir/1/2/3/4
>  mkdir /dir/subdir/a/b/c/d
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/07watch.test
> --- a/tools/xenstore/testsuite/07watch.test   Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/07watch.test   Fri Sep 16 06:46:15 2005
> @@ -1,8 +1,8 @@
>  # Watch something, write to it, check watch has fired.
> -write /test create contents
> +write /test contents
>  
>  1 watch /test token
> -2 write /test create contents2
> +2 write /test contents2
>  expect 1:/test:token
>  1 waitwatch
>  1 ackwatch token
> @@ -44,7 +44,7 @@
>  
>  # ignore watches while doing commands, should work.
>  watch /dir token
> -1 write /dir/test create contents
> +1 write /dir/test contents
>  expect contents
>  read /dir/test
>  expect /dir/test:token
> @@ -56,7 +56,7 @@
>  1 watch /dir token1
>  3 watch /dir token3
>  2 watch /dir token2
> -write /dir/test create contents
> +write /dir/test contents
>  expect 3:/dir/test:token3
>  3 waitwatch
>  3 ackwatch token3
> @@ -73,7 +73,7 @@
>  # If one dies (without acking), the other should still get ack.
>  1 watch /dir token1
>  2 watch /dir token2
> -write /dir/test create contents
> +write /dir/test contents
>  expect 2:/dir/test:token2
>  2 waitwatch
>  2 close
> @@ -85,7 +85,7 @@
>  # If one dies (without reading at all), the other should still get ack.
>  1 watch /dir token1
>  2 watch /dir token2
> -write /dir/test create contents
> +write /dir/test contents
>  2 close
>  expect 1:/dir/test:token1
>  1 waitwatch
> @@ -97,7 +97,7 @@
>  1 watch /dir token1
>  1 unwatch /dir token1
>  1 watch /dir token2
> -2 write /dir/test2 create contents
> +2 write /dir/test2 contents
>  expect 1:/dir/test2:token2
>  1 waitwatch
>  1 unwatch /dir token2
> @@ -107,7 +107,7 @@
>  # unwatch while watch pending.  Other watcher still gets the event.
>  1 watch /dir token1
>  2 watch /dir token2
> -write /dir/test create contents
> +write /dir/test contents
>  2 unwatch /dir token2
>  expect 1:/dir/test:token1
>  1 waitwatch
> @@ -117,17 +117,17 @@
>  
>  # unwatch while watch pending.  Should clear this so we get next event.
>  1 watch /dir token1
> -write /dir/test create contents
> +write /dir/test contents
>  1 unwatch /dir token1
>  1 watch /dir/test token2
> -write /dir/test none contents2
> +write /dir/test contents2
>  expect 1:/dir/test:token2
>  1 waitwatch
>  1 ackwatch token2
>  
>  # check we only get notified once.
>  1 watch /test token
> -2 write /test create contents2
> +2 write /test contents2
>  expect 1:/test:token
>  1 waitwatch
>  1 ackwatch token
> @@ -137,9 +137,9 @@
>  
>  # watches are queued in order.
>  1 watch / token
> -2 write /test1 create contents
> -2 write /test2 create contents
> -2 write /test3 create contents
> +2 write /test1 contents
> +2 write /test2 contents
> +2 write /test3 contents
>  expect 1:/test1:token
>  1 waitwatch
>  1 ackwatch token
> @@ -153,8 +153,8 @@
>  
>  # Creation of subpaths should be covered correctly.
>  1 watch / token
> -2 write /test/subnode create contents2
> -2 write /test/subnode/subnode create contents2
> +2 write /test/subnode contents2
> +2 write /test/subnode/subnode contents2
>  expect 1:/test/subnode:token
>  1 waitwatch
>  1 ackwatch token
> @@ -167,7 +167,7 @@
>  
>  # Watch event must have happened before we registered interest.
>  1 watch / token
> -2 write /test/subnode create contents2
> +2 write /test/subnode contents2
>  1 watch / token2 0
>  expect 1:/test/subnode:token
>  1 waitwatch
> @@ -185,7 +185,7 @@
>  
>  # Watch should not double-send after we ack, even if we did something in 
> between.
>  1 watch /test2 token
> -2 write /test2/foo create contents2
> +2 write /test2/foo contents2
>  expect 1:/test2/foo:token
>  1 waitwatch
>  expect 1:contents2
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/08transaction.slowtest
> --- a/tools/xenstore/testsuite/08transaction.slowtest Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/08transaction.slowtest Fri Sep 16 06:46:15 2005
> @@ -1,7 +1,7 @@
>  # Test transaction timeouts.  Take a second each.
>  
>  mkdir /test
> -write /test/entry1 create contents
> +write /test/entry1 contents
>  
>  # Transactions can take as long as the want...
>  start /test
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/08transaction.test
> --- a/tools/xenstore/testsuite/08transaction.test     Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/08transaction.test     Fri Sep 16 06:46:15 2005
> @@ -4,7 +4,7 @@
>  
>  # Simple transaction: create a file inside transaction.
>  1 start /test
> -1 write /test/entry1 create contents
> +1 write /test/entry1 contents
>  2 dir /test
>  expect 1:entry1
>  1 dir /test
> @@ -16,14 +16,14 @@
>  
>  # Create a file and abort transaction.
>  1 start /test
> -1 write /test/entry1 create contents
> +1 write /test/entry1 contents
>  2 dir /test
>  expect 1:entry1
>  1 dir /test
>  1 abort
>  2 dir /test
>  
> -write /test/entry1 create contents
> +write /test/entry1 contents
>  # Delete in transaction, commit
>  1 start /test
>  1 rm /test/entry1
> @@ -34,7 +34,7 @@
>  2 dir /test
>  
>  # Delete in transaction, abort.
> -write /test/entry1 create contents
> +write /test/entry1 contents
>  1 start /test
>  1 rm /test/entry1
>  expect 2:entry1
> @@ -84,8 +84,8 @@
>  # Multiple events from single transaction don't trigger assert
>  1 watch /test token
>  2 start /test
> -2 write /test/1 create contents
> -2 write /test/2 create contents
> +2 write /test/1 contents
> +2 write /test/2 contents
>  2 commit
>  expect 1:/test/1:token
>  1 waitwatch
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/09domain.test
> --- a/tools/xenstore/testsuite/09domain.test  Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/09domain.test  Fri Sep 16 06:46:15 2005
> @@ -3,7 +3,7 @@
>  # Create a domain, write an entry.
>  expect handle is 1
>  introduce 1 100 7 /my/home
> -1 write /entry1 create contents
> +1 write /entry1 contents
>  expect entry1
>  expect tool
>  dir /
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/10domain-homedir.test
> --- a/tools/xenstore/testsuite/10domain-homedir.test  Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/10domain-homedir.test  Fri Sep 16 06:46:15 2005
> @@ -4,7 +4,7 @@
>  mkdir /home
>  expect handle is 1
>  introduce 1 100 7 /home
> -1 write entry1 create contents
> +1 write entry1 contents
>  expect contents
>  read /home/entry1
>  expect entry1
> @@ -13,7 +13,7 @@
>  # Place a watch using a relative path: expect relative answer.
>  1 mkdir foo
>  1 watch foo token
> -write /home/foo/bar create contents
> +write /home/foo/bar contents
>  expect 1:foo/bar:token
>  1 waitwatch
>  1 ackwatch token
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/11domain-watch.test
> --- a/tools/xenstore/testsuite/11domain-watch.test    Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/11domain-watch.test    Fri Sep 16 06:46:15 2005
> @@ -1,13 +1,13 @@
>  # Test watching from a domain.
>  
>  # Watch something, write to it, check watch has fired.
> -write /test create contents
> +write /test contents
>  mkdir /dir
>  
>  expect handle is 1
>  introduce 1 100 7 /my/home
>  1 watch /test token
> -write /test create contents2
> +write /test contents2
>  expect 1:/test:token
>  1 waitwatch
>  1 ackwatch token
> @@ -19,10 +19,10 @@
>  expect handle is 1
>  introduce 1 100 7 /my/home
>  1 watch /dir token
> -write /dir/test create contents
> -1 write /dir/test2 create contents2
> -1 write /dir/test3 create contents3
> -1 write /dir/test4 create contents4
> +write /dir/test contents
> +1 write /dir/test2 contents2
> +1 write /dir/test3 contents3
> +1 write /dir/test4 contents4
>  expect 1:/dir/test:token
>  1 waitwatch
>  1 ackwatch token
> @@ -35,7 +35,7 @@
>  1 watch /dir token1
>  1 unwatch /dir token1
>  1 watch /dir token2
> -write /dir/test2 create contents
> +write /dir/test2 contents
>  expect 1:/dir/test2:token2
>  1 waitwatch
>  1 unwatch /dir token2
> @@ -46,7 +46,7 @@
>  expect handle is 1
>  introduce 1 100 7 /my/home
>  1 watch /dir token1
> -write /dir/test2 create contents
> +write /dir/test2 contents
>  1 unwatch /dir token1
>  release 1
>  1 close
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/12readonly.test
> --- a/tools/xenstore/testsuite/12readonly.test        Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/12readonly.test        Fri Sep 16 06:46:15 2005
> @@ -1,6 +1,6 @@
>  # Test that read only connection can't alter store.
>  
> -write /test create contents
> +write /test contents
>  
>  readonly
>  expect test
> @@ -20,9 +20,9 @@
>  
>  # These don't work
>  expect write failed: Read-only file system
> -write /test2 create contents
> +write /test2 contents
>  expect write failed: Read-only file system
> -write /test create contents
> +write /test contents
>  expect setperm failed: Read-only file system
>  setperm /test 100 NONE
>  expect setperm failed: Read-only file system
> @@ -35,7 +35,7 @@
>  # Check that watches work like normal.
>  watch / token
>  1 readwrite
> -1 write /test create contents
> +1 write /test contents
>  expect /test:token
>  waitwatch
>  ackwatch token
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/13watch-ack.test
> --- a/tools/xenstore/testsuite/13watch-ack.test       Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/13watch-ack.test       Fri Sep 16 06:46:15 2005
> @@ -13,10 +13,10 @@
>  1 watch /test/1 token1
>  1 watch /test/2 token2
>  1 watch /test/3 token3
> -2 write /test/2 create contents2
> +2 write /test/2 contents2
>  expect 1:/test/2:token2
>  1 waitwatch
> -3 write /test/1 create contents1
> -4 write /test/3 create contents3
> +3 write /test/1 contents1
> +4 write /test/3 contents3
>  1 ackwatch token2
>  1 close
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/14complexperms.test
> --- a/tools/xenstore/testsuite/14complexperms.test    Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/14complexperms.test    Fri Sep 16 06:46:15 2005
> @@ -12,13 +12,7 @@
>  expect *Permission denied
>  read /dir/file 
>  expect *Permission denied
> -write /dir/file none value 
> -expect *Permission denied
> -write /dir/file create value 
> -expect *Permission denied
> -write /dir/file excl value 
> -expect write failed: Invalid argument
> -write /dir/file crap value 
> +write /dir/file value 
>  expect *Permission denied
>  mkdir /dir/file 
>  expect *Permission denied
> @@ -30,7 +24,7 @@
>  expect *Permission denied
>  setperm /dir/file 0 NONE 
>  watch /dir/file token 
> -1 write /dir/file create contents
> +1 write /dir/file contents
>  1 rm /dir/file
>  expect waitwatch failed: Connection timed out
>  waitwatch
> @@ -50,7 +44,7 @@
>  
>  # Now it exists
>  setid 0
> -write /dir/file create contents
> +write /dir/file contents
>  
>  setid 1
>  expect *Permission denied
> @@ -58,13 +52,7 @@
>  expect *Permission denied
>  read /dir/file 
>  expect *Permission denied
> -write /dir/file none value 
> -expect *Permission denied
> -write /dir/file create value 
> -expect *Permission denied
> -write /dir/file excl value 
> -expect write failed: Invalid argument
> -write /dir/file crap value 
> +write /dir/file value 
>  expect *Permission denied
>  mkdir /dir/file 
>  expect *Permission denied
> @@ -76,7 +64,7 @@
>  expect *Permission denied
>  setperm /dir/file 0 NONE 
>  watch /dir/file token 
> -1 write /dir/file create contents
> +1 write /dir/file contents
>  1 rm /dir/file
>  expect waitwatch failed: Connection timed out
>  waitwatch
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/testsuite/15nowait.test
> --- a/tools/xenstore/testsuite/15nowait.test  Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/testsuite/15nowait.test  Fri Sep 16 06:46:15 2005
> @@ -1,10 +1,10 @@
>  # If we don't wait for an ack, we can crash daemon as it never expects to be
>  # sending out two replies on top of each other.
> -noackwrite /1 create 1
> -noackwrite /2 create 2
> -noackwrite /3 create 3
> -noackwrite /4 create 4
> -noackwrite /5 create 5
> +noackwrite /1 1
> +noackwrite /2 2
> +noackwrite /3 3
> +noackwrite /4 4
> +noackwrite /5 5
>  readack
>  readack
>  readack
> @@ -13,11 +13,11 @@
>  
>  expect handle is 1
>  introduce 1 100 7 /my/home
> -1 noackwrite /1 create 1
> -1 noackwrite /2 create 2
> -1 noackwrite /3 create 3
> -1 noackwrite /4 create 4
> -1 noackwrite /5 create 5
> +1 noackwrite /1 1
> +1 noackwrite /2 2
> +1 noackwrite /3 3
> +1 noackwrite /4 4
> +1 noackwrite /5 5
>  1 readack
>  1 readack
>  1 readack
> diff -r 90b4e122d340 -r a678d0c04c92 
> tools/xenstore/testsuite/16block-watch-crash.test
> --- a/tools/xenstore/testsuite/16block-watch-crash.test       Fri Sep 16 
> 05:01:11 2005
> +++ b/tools/xenstore/testsuite/16block-watch-crash.test       Fri Sep 16 
> 06:46:15 2005
> @@ -4,8 +4,8 @@
>  watch /test token
>  1 start /test
>  # This will block on above
> -noackwrite /test/entry create contents
> -1 write /test/entry2 create contents
> +noackwrite /test/entry contents
> +1 write /test/entry2 contents
>  1 commit
>  readack
>  expect /test/entry2:token
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/xenstored_core.c
> --- a/tools/xenstore/xenstored_core.c Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/xenstored_core.c Fri Sep 16 06:46:15 2005
> @@ -968,14 +968,12 @@
>       return lstat(node_dir(conn->transaction, node), &st) == 0;
>  }
>  
> -/* path, flags, data... */
> +/* path, data... */
>  static void do_write(struct connection *conn, struct buffered_data *in)
>  {
>       unsigned int offset, datalen;
> -     char *vec[2];
> +     char *vec[1] = { NULL }; /* gcc4 + -W + -Werror fucks code. */
>       char *node, *tmppath;
> -     enum xs_perm_type mode;
> -     struct stat st;
>  
>       /* Extra "strings" can be created by binary data. */
>       if (get_strings(in, vec, ARRAY_SIZE(vec)) < ARRAY_SIZE(vec)) {
> @@ -992,37 +990,20 @@
>       if (transaction_block(conn, node))
>               return;
>  
> -     offset = strlen(vec[0]) + strlen(vec[1]) + 2;
> +     offset = strlen(vec[0]) + 1;
>       datalen = in->used - offset;
>  
> -     if (streq(vec[1], XS_WRITE_NONE))
> -             mode = XS_PERM_WRITE;
> -     else if (streq(vec[1], XS_WRITE_CREATE))
> -             mode = XS_PERM_WRITE|XS_PERM_ENOENT_OK;
> -     else if (streq(vec[1], XS_WRITE_CREATE_EXCL))
> -             mode = XS_PERM_WRITE|XS_PERM_ENOENT_OK;
> -     else {
> -             send_error(conn, EINVAL);
> -             return;
> -     }
> -
> -     if (!check_node_perms(conn, node, mode)) {
> +     if (!check_node_perms(conn, node, XS_PERM_WRITE|XS_PERM_ENOENT_OK)) {
>               send_error(conn, errno);
>               return;
>       }
>  
> -     if (lstat(node_dir(conn->transaction, node), &st) != 0) {
> +     if (!node_exists(conn, node)) {
>               char *dir;
>  
>               /* Does not exist... */
>               if (errno != ENOENT) {
>                       send_error(conn, errno);
> -                     return;
> -             }
> -
> -             /* Not going to create it? */
> -             if (streq(vec[1], XS_WRITE_NONE)) {
> -                     send_error(conn, ENOENT);
>                       return;
>               }
>  
> @@ -1034,11 +1015,6 @@
>               
>       } else {
>               /* Exists... */
> -             if (streq(vec[1], XS_WRITE_CREATE_EXCL)) {
> -                     send_error(conn, EEXIST);
> -                     return;
> -             }
> -
>               tmppath = tempfile(node_datafile(conn->transaction, node),
>                                  in->buffer + offset, datalen);
>               if (!tmppath) {
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/xs.c
> --- a/tools/xenstore/xs.c     Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/xs.c     Fri Sep 16 06:46:15 2005
> @@ -326,32 +326,17 @@
>  }
>  
>  /* Write the value of a single file.
> - * Returns false on failure.  createflags can be 0, O_CREAT, or 
> O_CREAT|O_EXCL.
> + * Returns false on failure.
>   */
>  bool xs_write(struct xs_handle *h, const char *path,
> -           const void *data, unsigned int len, int createflags)
> -{
> -     const char *flags;
> -     struct iovec iovec[3];
> -
> -     /* Format: Flags (as string), path, data. */
> -     if (createflags == 0)
> -             flags = XS_WRITE_NONE;
> -     else if (createflags == O_CREAT)
> -             flags = XS_WRITE_CREATE;
> -     else if (createflags == (O_CREAT|O_EXCL))
> -             flags = XS_WRITE_CREATE_EXCL;
> -     else {
> -             errno = EINVAL;
> -             return false;
> -     }
> +           const void *data, unsigned int len)
> +{
> +     struct iovec iovec[2];
>  
>       iovec[0].iov_base = (void *)path;
>       iovec[0].iov_len = strlen(path) + 1;
> -     iovec[1].iov_base = (void *)flags;
> -     iovec[1].iov_len = strlen(flags) + 1;
> -     iovec[2].iov_base = (void *)data;
> -     iovec[2].iov_len = len;
> +     iovec[1].iov_base = (void *)data;
> +     iovec[1].iov_len = len;
>  
>       return xs_bool(xs_talkv(h, XS_WRITE, iovec, ARRAY_SIZE(iovec), NULL));
>  }
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/xs.h
> --- a/tools/xenstore/xs.h     Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/xs.h     Fri Sep 16 06:46:15 2005
> @@ -53,10 +53,10 @@
>  void *xs_read(struct xs_handle *h, const char *path, unsigned int *len);
>  
>  /* Write the value of a single file.
> - * Returns false on failure.  createflags can be 0, O_CREAT, or 
> O_CREAT|O_EXCL.
> + * Returns false on failure.
>   */
>  bool xs_write(struct xs_handle *h, const char *path, const void *data,
> -           unsigned int len, int createflags);
> +           unsigned int len);
>  
>  /* Create a new directory.
>   * Returns false on failure, or success if it already exists.
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/xs_crashme.c
> --- a/tools/xenstore/xs_crashme.c     Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/xs_crashme.c     Fri Sep 16 06:46:15 2005
> @@ -267,17 +267,12 @@
>               free(xs_read(h, name, &num));
>               break;
>       case 2: {
> -             int flags = random_flags(&state);
>               char *contents = talloc_asprintf(NULL, "%i",
>                                                get_randomness(&state));
>               unsigned int len = get_randomness(&state)%(strlen(contents)+1);
>               if (verbose)
> -                     printf("WRITE %s %s %.*s\n", name,
> -                            flags == O_CREAT ? "O_CREAT" 
> -                            : flags == (O_CREAT|O_EXCL) ? "O_CREAT|O_EXCL"
> -                            : flags == 0 ? "0" : "CRAPFLAGS",
> -                            len, contents);
> -             xs_write(h, name, contents, len, flags);
> +                     printf("WRITE %s %.*s\n", name, len, contents);
> +             xs_write(h, name, contents, len);
>               break;
>       }
>       case 3:
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/xs_random.c
> --- a/tools/xenstore/xs_random.c      Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/xs_random.c      Fri Sep 16 06:46:15 2005
> @@ -26,7 +26,7 @@
>       void *(*read)(void *h, const char *path, unsigned int *len);
>  
>       bool (*write)(void *h, const char *path, const void *data,
> -                   unsigned int len, int createflags);
> +                   unsigned int len);
>  
>       bool (*mkdir)(void *h, const char *path);
>  
> @@ -333,40 +333,18 @@
>  
>  static bool file_write(struct file_ops_info *info,
>                      const char *path, const void *data,
> -                    unsigned int len, int createflags)
> +                    unsigned int len)
>  {
>       char *filename = filename_to_data(path_to_name(info, path));
>       int fd;
>  
> -     /* Kernel isn't strict, but library is. */
> -     if (createflags & ~(O_CREAT|O_EXCL)) {
> -             errno = EINVAL;
> -             return false;
> -     }
> -
>       if (!write_ok(info, path))
>               return false;
>  
> -     /* We regard it as existing if dir exists. */
> -     if (strends(filename, ".DATA")) {
> -             if (!createflags)
> -                     createflags = O_CREAT;
> -             if (createflags & O_EXCL) {
> -                     errno = EEXIST;
> -                     return false;
> -             }
> -     }
> -
> -     if (createflags & O_CREAT)
> -             make_dirs(parent_filename(filename));
> -
> -     fd = open(filename, createflags|O_TRUNC|O_WRONLY, 0600);
> -     if (fd < 0) {
> -             /* FIXME: Another hack. */
> -             if (!(createflags & O_CREAT) && errno == EISDIR)
> -                     errno = EEXIST;
> +     make_dirs(parent_filename(filename));
> +     fd = open(filename, O_CREAT|O_TRUNC|O_WRONLY, 0600);
> +     if (fd < 0)
>               return false;
> -     }
>  
>       if (write(fd, data, len) != (int)len)
>               barf_perror("Bad write to %s", filename);
> @@ -846,20 +824,6 @@
>       return ret;
>  }
>  
> -static int random_flags(int *state)
> -{
> -     switch (get_randomness(state) % 4) {
> -     case 0:
> -             return 0;
> -     case 1:
> -             return O_CREAT;
> -     case 2:
> -             return O_CREAT|O_EXCL;
> -     default:
> -             return get_randomness(state);
> -     }
> -}
> -
>  /* Do the next operation, return the results. */
>  static char *do_next_op(struct ops *ops, void *h, int state, bool verbose)
>  {
> @@ -883,18 +847,12 @@
>               ret = linearize_read(ops->read(h, name, &num), &num);
>               break;
>       case 2: {
> -             int flags = random_flags(&state);
>               char *contents = talloc_asprintf(NULL, "%i",
>                                                get_randomness(&state));
>               unsigned int len = get_randomness(&state)%(strlen(contents)+1);
>               if (verbose)
> -                     printf("WRITE %s %s %.*s\n", name,
> -                            flags == O_CREAT ? "O_CREAT" 
> -                            : flags == (O_CREAT|O_EXCL) ? "O_CREAT|O_EXCL"
> -                            : flags == 0 ? "0" : "CRAPFLAGS",
> -                            len, contents);
> -             ret = bool_to_errstring(ops->write(h, name, contents, len,
> -                                                flags));
> +                     printf("WRITE %s %.*s\n", name, len, contents);
> +             ret = bool_to_errstring(ops->write(h, name, contents, len));
>               talloc_steal(ret, contents);
>               break;
>       }
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/xs_stress.c
> --- a/tools/xenstore/xs_stress.c      Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/xs_stress.c      Fri Sep 16 06:46:15 2005
> @@ -61,7 +61,7 @@
>                       barf_perror("%i: can't read %s iter %i",
>                                   childnum, file, i);
>               sprintf(tmp, "%i", atoi(contents) + 1);
> -             if (!xs_write(h, file, tmp, strlen(tmp)+1, 0))
> +             if (!xs_write(h, file, tmp, strlen(tmp)+1))
>                       barf_perror("%i: can't write %s iter %i",
>                                   childnum, file, i);
>  
> @@ -91,7 +91,7 @@
>  
>       if (togo == 0) {
>               sprintf(filename, "%s/count", base);
> -             if (!xs_write(h, filename, "0", 2, O_EXCL|O_CREAT))
> +             if (!xs_write(h, filename, "0", 1))
>                       barf_perror("Writing to %s", filename);
>               return;
>       }
> diff -r 90b4e122d340 -r a678d0c04c92 tools/xenstore/xs_test.c
> --- a/tools/xenstore/xs_test.c        Fri Sep 16 05:01:11 2005
> +++ b/tools/xenstore/xs_test.c        Fri Sep 16 06:46:15 2005
> @@ -192,7 +192,7 @@
>            "Reads commands from stdin, one per line:"
>            "  dir <path>\n"
>            "  read <path>\n"
> -          "  write <path> <flags> <value>...\n"
> +          "  write <path> <value>...\n"
>            "  setid <id>\n"
>            "  mkdir <path>\n"
>            "  rm <path>\n"
> @@ -213,7 +213,7 @@
>            "  notimeout\n"
>            "  readonly\n"
>            "  readwrite\n"
> -          "  noackwrite <path> <flags> <value>...\n"
> +          "  noackwrite <path> <value>...\n"
>            "  readack\n"
>            "  dump\n");
>  }
> @@ -348,47 +348,22 @@
>               output("%.*s\n", len, value);
>  }
>  
> -static void do_write(unsigned int handle, char *path, char *flags, char 
> *data)
> -{
> -     int f;
> -
> -     if (streq(flags, "none"))
> -             f = 0;
> -     else if (streq(flags, "create"))
> -             f = O_CREAT;
> -     else if (streq(flags, "excl"))
> -             f = O_CREAT | O_EXCL;
> -     else if (streq(flags, "crap"))
> -             f = 100;
> -     else
> -             barf("write flags 'none', 'create' or 'excl' only");
> -
> -     if (!xs_write(handles[handle], path, data, strlen(data), f))
> +static void do_write(unsigned int handle, char *path, char *data)
> +{
> +     if (!xs_write(handles[handle], path, data, strlen(data)))
>               failed(handle);
>  }
>  
>  static void do_noackwrite(unsigned int handle,
> -                       char *path, const char *flags, char *data)
> +                       char *path, char *data)
>  {
>       struct xsd_sockmsg msg;
>  
> -     /* Format: Flags (as string), path, data. */
> -     if (streq(flags, "none"))
> -             flags = XS_WRITE_NONE;
> -     else if (streq(flags, "create"))
> -             flags = XS_WRITE_CREATE;
> -     else if (streq(flags, "excl"))
> -             flags = XS_WRITE_CREATE_EXCL;
> -     else
> -             barf("noackwrite flags 'none', 'create' or 'excl' only");
> -
> -     msg.len = strlen(path) + 1 + strlen(flags) + 1 + strlen(data);
> +     msg.len = strlen(path) + 1 + strlen(data);
>       msg.type = XS_WRITE;
>       if (!write_all_choice(handles[handle]->fd, &msg, sizeof(msg)))
>               failed(handle);
>       if (!write_all_choice(handles[handle]->fd, path, strlen(path) + 1))
> -             failed(handle);
> -     if (!write_all_choice(handles[handle]->fd, flags, strlen(flags) + 1))
>               failed(handle);
>       if (!write_all_choice(handles[handle]->fd, data, strlen(data)))
>               failed(handle);
> @@ -778,8 +753,7 @@
>       else if (streq(command, "read"))
>               do_read(handle, arg(line, 1));
>       else if (streq(command, "write"))
> -             do_write(handle,
> -                      arg(line, 1), arg(line, 2), arg(line, 3));
> +             do_write(handle, arg(line, 1), arg(line, 2));
>       else if (streq(command, "setid"))
>               do_setid(handle, arg(line, 1));
>       else if (streq(command, "mkdir"))
> @@ -832,7 +806,7 @@
>               xs_daemon_close(handles[handle]);
>               handles[handle] = NULL;
>       } else if (streq(command, "noackwrite"))
> -             do_noackwrite(handle, arg(line,1), arg(line,2), arg(line,3));
> +             do_noackwrite(handle, arg(line,1), arg(line,2));
>       else if (streq(command, "readack"))
>               do_readack(handle);
>       else
> 
> -- 
> A bad analogy is like a leaky screwdriver -- Richard Braakman
> 
> 

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

<Prev in Thread] Current Thread [Next in Thread>