diff options
author | Damien Zammit <damien@zamaudio.com> | 2020-03-29 18:51:00 +1100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2020-03-29 17:28:20 +0200 |
commit | 0f77ef36b53b1259a7ce928dcdad22af0dffa52e (patch) | |
tree | e341e522f9ffd9c4cc6da80c964b5185e6faad39 /libstore | |
parent | ca1b073bc058d3cd1a8ba152ef5a39d0a78a9e0e (diff) | |
download | hurd-0f77ef36b53b1259a7ce928dcdad22af0dffa52e.tar.gz hurd-0f77ef36b53b1259a7ce928dcdad22af0dffa52e.tar.bz2 hurd-0f77ef36b53b1259a7ce928dcdad22af0dffa52e.zip |
libstore: Add ability to pass custom master device with format @master:/dev/device
Diffstat (limited to 'libstore')
-rw-r--r-- | libstore/device.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/libstore/device.c b/libstore/device.c index 1d8f57fd..b8961a52 100644 --- a/libstore/device.c +++ b/libstore/device.c @@ -95,15 +95,22 @@ dopen (const char *name, device_t *device, int *mod_flags) { device_t dev_master; error_t err = ENODEV; + char *pos; + char *master; + char *rest; - if (name[0] == '/') + /* Parse @master:/dev/hello */ + if ( (name[0] == '@') && (pos = strchr (name, ':')) ) { + master = strndup (name+1, pos-(name+1)); + rest = strdup (pos+1); + if (*mod_flags & STORE_HARD_READONLY) { - dev_master = file_name_lookup (name, O_READ, 0); + dev_master = file_name_lookup (master, O_READ, 0); if (dev_master != MACH_PORT_NULL) { - err = device_open (dev_master, D_READ, "disk", device); + err = device_open (dev_master, D_READ, rest, device); if (err) err = ENODEV; @@ -114,13 +121,13 @@ dopen (const char *name, device_t *device, int *mod_flags) } else { - dev_master = file_name_lookup (name, O_READ | O_WRITE, 0); + dev_master = file_name_lookup (master, O_READ | O_WRITE, 0); if (dev_master != MACH_PORT_NULL) { - err = device_open (dev_master, D_READ | D_WRITE, "disk", device); + err = device_open (dev_master, D_READ | D_WRITE, rest, device); if (err == ED_READ_ONLY) { - err = device_open (dev_master, D_READ, "disk", device); + err = device_open (dev_master, D_READ, rest, device); if (! err) *mod_flags |= STORE_HARD_READONLY; else |