summaryrefslogtreecommitdiff
path: root/libstore
diff options
context:
space:
mode:
authorMiles Bader <miles@gnu.org>1995-11-13 21:41:39 +0000
committerMiles Bader <miles@gnu.org>1995-11-13 21:41:39 +0000
commitee680eaffc00d09a801a13038651f8e83278602c (patch)
treedba24d5209344a3863058054fb516af18fd1d9c0 /libstore
parentb3a0f23fedceb8e5ee6c60444e6c0fbfa94db2d0 (diff)
Formerly create.c.~2~
Diffstat (limited to 'libstore')
-rw-r--r--libstore/create.c24
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;
}