From cf07eb2631ac0a82bee275a426f09bc93f27e902 Mon Sep 17 00:00:00 2001 From: Miles Bader Date: Fri, 20 Jun 1997 05:22:45 +0000 Subject: (dopen): If *MOD_FLAGS already contains STORE_HARD_READONLY, don't ever try to open for reading. (_store_device_create): Use _store_create instead of _make_store. Update FSF address. --- libstore/device.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'libstore/device.c') diff --git a/libstore/device.c b/libstore/device.c index e0493966..b758d86f 100644 --- a/libstore/device.c +++ b/libstore/device.c @@ -1,9 +1,7 @@ /* Mach device store backend Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. - Written by Miles Bader - This file is part of the GNU Hurd. The GNU Hurd is free software; you can redistribute it and/or @@ -18,7 +16,7 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ #include #include @@ -95,15 +93,20 @@ dopen (const char *name, device_t *device, int *mod_flags) error_t err = get_privileged_ports (0, &dev_master); if (! err) { - err = device_open (dev_master, D_WRITE | D_READ, (char *)name, device); - if (err == ED_READ_ONLY) + if (*mod_flags & STORE_HARD_READONLY) + err = device_open (dev_master, D_READ, (char *)name, device); + else { - err = device_open (dev_master, D_READ, (char *)name, device); - if (! err) - *mod_flags |= STORE_HARD_READONLY; + err = device_open (dev_master, D_WRITE | D_READ, (char *)name, device); + if (err == ED_READ_ONLY) + { + err = device_open (dev_master, D_READ, (char *)name, device); + if (! err) + *mod_flags |= STORE_HARD_READONLY; + } + else if (! err) + *mod_flags &= ~STORE_HARD_READONLY; } - else if (! err) - *mod_flags &= ~STORE_HARD_READONLY; mach_port_deallocate (mach_task_self (), dev_master); } return err; @@ -218,9 +221,9 @@ _store_device_create (device_t device, int flags, size_t block_size, const struct store_run *runs, size_t num_runs, struct store **store) { - *store = - _make_store (&store_device_class, device, flags, block_size, runs, num_runs, 0); - return *store ? 0 : ENOMEM; + return + _store_create (&store_device_class, device, flags, block_size, + runs, num_runs, 0, store); } /* Open the device NAME, and return the corresponding store in STORE. */ -- cgit v1.2.3