diff options
author | Miles Bader <miles@gnu.org> | 1997-08-11 16:00:46 +0000 |
---|---|---|
committer | Miles Bader <miles@gnu.org> | 1997-08-11 16:00:46 +0000 |
commit | 949bb413bb8aad6eadc39a2da36fa3cafd62cd89 (patch) | |
tree | 067f9e1a9c757e40871a8f88ca7878d91f775e47 /libdiskfs | |
parent | 06e02f0071c42ca4c19110f5f73c22cfd6a1c154 (diff) |
No long used
Diffstat (limited to 'libdiskfs')
-rw-r--r-- | libdiskfs/filedev.c | 135 | ||||
-rw-r--r-- | libdiskfs/machdev.c | 92 |
2 files changed, 0 insertions, 227 deletions
diff --git a/libdiskfs/filedev.c b/libdiskfs/filedev.c deleted file mode 100644 index d7ee7030..00000000 --- a/libdiskfs/filedev.c +++ /dev/null @@ -1,135 +0,0 @@ -/* Get the mach device underlying a file - - Copyright (C) 1995, 1996 Free Software Foundation, Inc. - - Written by Miles Bader <miles@gnu.ai.mit.edu> - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - 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. */ - -#include <errno.h> -#include <sys/fcntl.h> - -#include <device/device.h> - -#include "priv.h" - -/* Returns the name and a send right for the mach device on which the file - NAME is stored, and returns it in DEV_NAME (which is malloced) and PORT. - Other values returned are START, the first valid offset, SIZE, the the - number of blocks after START, and BLOCK_SIZE, the units in which the - device is addressed. - - The device is opened for reading, and if the diskfs global variable - DISKFS_READONLY is false, writing. */ -error_t -diskfs_get_file_device (char *name, - char **dev_name, mach_port_t *port, - off_t *start, off_t *size, size_t *block_size) -{ - int i; - error_t err; - mach_msg_type_number_t data_len = 100; - mach_msg_type_number_t num_ints = 10, num_ports = 10, num_offsets = 10; - int _ints[num_ints], *ints = _ints; - mach_port_t _ports[num_ports], *ports = _ports; - off_t _offsets[num_offsets], *offsets = _offsets; - char _data[data_len], *data = _data; - file_t node = - file_name_lookup (name, diskfs_readonly ? O_RDONLY : O_RDWR, 0); - - if (node == MACH_PORT_NULL) - return errno; - - *port = MACH_PORT_NULL; - - err = file_get_storage_info (node, &ports, &num_ports, &ints, &num_ints, - &offsets, &num_offsets, &data, &data_len); - if (err) - return err; - - /* See <hurd/store.h> for an explanation of what's in the vectors returned - by file_get_storage_info. */ - - if (num_ints < 6) - err = EGRATUITOUS; - else if (ints[0] != STORAGE_DEVICE) - err = ENODEV; - - if (!err && block_size) - *block_size = ints[2]; - - if (!err && (start || size)) - /* Extract the device block addresses. */ - { - size_t num_runs = ints[3]; - if (num_runs != 1) - /* We can't handle anything but a contiguous set of blocks. */ - err = ENODEV; /* XXX */ - else - { - if (start) - *start = offsets[0]; - if (size) - *size = offsets[1]; - } - } - - if (!err && dev_name) - /* Extract the device name into DEV_NAME. */ - { - size_t name_len = ints[4]; - if (data && name_len > 0) - if (data_len < name_len) - err = EGRATUITOUS; - else - { - *dev_name = malloc (name_len); - if (*dev_name) - strcpy (*dev_name, data); - else - err = ENOMEM; - } - } - - if (!err && port) - /* Extract the device port. */ - if (num_ports != 1) - err = EGRATUITOUS; - else - *port = ports[0]; - - /* Deallocate things we don't care about or that we've made copies of. */ - for (i = (err || !port) ? 0 : 1; i < num_ports; i++) - if (MACH_PORT_VALID (ports[i])) - mach_port_deallocate (mach_task_self (), ports[i]); - -#define DISCARD_MEM(v, vl, b) \ - if (v != b) \ - vm_deallocate (mach_task_self (), (vm_address_t)v, vl * sizeof *v); - DISCARD_MEM (ports, num_ports, _ports); - DISCARD_MEM (ints, num_ints, _ints); - DISCARD_MEM (offsets, num_offsets, _offsets); - DISCARD_MEM (data, data_len, _data); - - /* Note that we don't deallocate NODE unless we're returning an error, - which should prevent the information returned by file_get_storage_info - from changing. */ - - if (err) - /* We got an error, deallocate everything. */ - mach_port_deallocate (mach_task_self (), node); - - return err; -} diff --git a/libdiskfs/machdev.c b/libdiskfs/machdev.c deleted file mode 100644 index 786bf0ab..00000000 --- a/libdiskfs/machdev.c +++ /dev/null @@ -1,92 +0,0 @@ -/* Get mach device info - - Copyright (C) 1995 Free Software Foundation, Inc. - - Written by Miles Bader <miles@gnu.ai.mit.edu> - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License as - published by the Free Software Foundation; either version 2, or (at - your option) any later version. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - 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. */ - -#include <stdio.h> - -#include <device/device.h> - -#include "priv.h" - -/* Returns a send right to for the mach device called NAME, and returns it in - PORT. Other values returned are START, the first valid offset, SIZE, the - the number of blocks after START, and BLOCK_SIZE, the units in which the - device is addressed. - - The device is opened for reading, and if the diskfs global variable - DISKFS_READ_ONLY is false, writing. - - If NAME cannot be opened and this is a bootstrap filename, the user will - be prompted for new names until a valid one is found. */ -error_t -diskfs_get_mach_device (char *name, - mach_port_t *port, - off_t *start, off_t *size, size_t *block_size) -{ - error_t err = 0; - - do - { - mach_port_t dev_master; - - err = get_privileged_ports (0, &dev_master); - if (err) - return err; - - err = device_open (dev_master, - (diskfs_readonly ? 0 : D_WRITE) | D_READ, - name, port); - - if (err == D_NO_SUCH_DEVICE && diskfs_boot_flags) - /* If this is a bootstrap filesystem, prompt the user to give us - another name rather than just crashing. */ - { - char *line = 0; - size_t linesz = 0; - ssize_t len; - - printf ("Cannot open device %s\n", name); - printf ("Open instead: "); - fflush (stdout); - len = getline (&line, &linesz, stdin); - if (len > 2) - name = line; - } - - mach_port_deallocate (mach_task_self (), dev_master); - } - while (err == D_NO_SUCH_DEVICE && diskfs_boot_flags); - - if (!err) - { - unsigned sizes_len = DEV_GET_SIZE_COUNT; - size_t sizes[DEV_GET_SIZE_COUNT]; - - err = device_get_status (*port, DEV_GET_SIZE, sizes, &sizes_len); - assert (sizes_len == DEV_GET_SIZE_COUNT); - - *start = 0; - *size = sizes[DEV_GET_SIZE_DEVICE_SIZE]; - *block_size = sizes[DEV_GET_SIZE_RECORD_SIZE]; - if (*block_size > 1) - *size /= *block_size; - } - - return err; -} |