diff options
Diffstat (limited to 'libstore')
-rw-r--r-- | libstore/create.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/libstore/create.c b/libstore/create.c index 8e55f79d..04b49ae5 100644 --- a/libstore/create.c +++ b/libstore/create.c @@ -20,6 +20,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <hurd/fs.h> + #include "store.h" /* Return a new store in STORE, which refers to the storage underlying @@ -30,26 +32,28 @@ error_t store_create (file_t source, struct store **store) error_t err; mach_port_t port; string_t name_buf; - vm_address_t misc; - vm_size_t misc_len = 0; + char *misc; + mach_msg_type_number_t misc_len = 0; off_t *runs; - unsigned runs_len = 0; + mach_msg_type_number_t runs_len = 0; int flags; + size_t block_size; + int class; - err = file_get_storage_info (source, &class, &runs, &runs_len, block_size, + err = file_get_storage_info (source, &class, &runs, &runs_len, &block_size, name_buf, &port, &misc, &misc_len, &flags); if (err) return err; if (misc_len > 0) - vm_deallocate (mach_task_self (), misc, misc_len); + vm_deallocate (mach_task_self (), (vm_address_t)misc, misc_len); switch (class) { case STORAGE_DEVICE: err = _store_device_create (port, runs, runs_len, block_size, store); break; - case STORAGE_FILE: + case STORAGE_HURD_FILE: err = _store_device_create (port, runs, runs_len, block_size, store); break; default: @@ -62,10 +66,16 @@ error_t store_create (file_t source, struct store **store) if (runs_len > 0) /* RUNS is copied into malloced storage above. */ - vm_deallocate (mach_task_self (), runs, runs_len); + vm_deallocate (mach_task_self (), (vm_address_t)runs, runs_len); if (err) mach_port_deallocate (mach_task_self (), port); + else + /* Keep a reference to SOURCE around. */ + { + mach_port_mod_refs (mach_task_self (), source, MACH_PORT_RIGHT_SEND, 1); + (*store)->source = source; + } return err; } |