diff options
-rw-r--r-- | tmpfs/ChangeLog | 26 | ||||
-rw-r--r-- | tmpfs/dir.c | 8 | ||||
-rw-r--r-- | tmpfs/node.c | 30 | ||||
-rw-r--r-- | tmpfs/tmpfs.c | 12 | ||||
-rw-r--r-- | tmpfs/tmpfs.h | 5 |
5 files changed, 57 insertions, 24 deletions
diff --git a/tmpfs/ChangeLog b/tmpfs/ChangeLog index 67a047ba..16d3ba0c 100644 --- a/tmpfs/ChangeLog +++ b/tmpfs/ChangeLog @@ -1,3 +1,29 @@ +2000-12-30 Marcus Brinkmann <marcus@gnu.org> + + * dir.c: Include <stddef.h>, <unistd.h>, <sys/mman.h> + (diskfs_get_directs): Cast *data to struct dirent *. + + * node.c: Include <stddef.h>. + (diskfs_alloc_node): Remove unused variables err, st, np. + (diskfs_free_node): Use *np->dn, not *dn to calculate used space. + (recompute_blocks): Replace DT_DEV with DT_BLK. + (diskfs_node_norefs): Likewise. + (recompute_blocks): Take address of np->dn_stat for pointer st. + (diskfs_cached_lookup): New variable st. + (diskfs_cached_lookup): Set st to &np->dn_stat, not &dn->dn_stat. + (create_symlink_hook): Fix malloc call and return code check. + (read_symlink_hook): Return 0. + + * tmpfs.c: Include <argp.h>, <string.h>, <inttypes.h>, <argz.h>, + <error.h>. + (parse_opt): Reverse second and third argument of strtoimax call. + + * tmpfs.h (struct disknode): Remove blind passenger (unnamed copy + of anonymous struct {} reg). + + Some of the above were also reported by Alexey Dejneka + <adejneka@comail.ru>. + 2000-12-28 Roland McGrath <roland@frob.com> * node.c (recompute_blocks): New function, broken out of ... diff --git a/tmpfs/dir.c b/tmpfs/dir.c index 595e5437..92fa8e32 100644 --- a/tmpfs/dir.c +++ b/tmpfs/dir.c @@ -17,6 +17,10 @@ You should have received a copy of the GNU General Public License along with the GNU Hurd; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <stddef.h> +#include <unistd.h> +#include <sys/mman.h> + #include "tmpfs.h" #include <stdlib.h> @@ -66,7 +70,7 @@ diskfs_get_directs (struct node *dp, int entry, int n, return ENOMEM; } - entp = *data; + entp = (struct dirent *) *data; entp->d_fileno = dp->dn_stat.st_ino; entp->d_type = DT_DIR; entp->d_namlen = 1; @@ -146,7 +150,7 @@ diskfs_lookup_hard (struct node *dp, } if (namelen == 2 && name[0] == '.' && name[1] == '.') { - struct disknode *ddnp = dp->dn->dir.dotdot; + struct disknode *ddnp = dp->dn->u.dir.dotdot; assert (np != 0); if (ddnp == 0) /* root directory */ return EAGAIN; diff --git a/tmpfs/node.c b/tmpfs/node.c index 65d1305a..ad9b1cdb 100644 --- a/tmpfs/node.c +++ b/tmpfs/node.c @@ -17,6 +17,8 @@ You should have received a copy of the GNU General Public License along with the GNU Hurd; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <stddef.h> + #include "tmpfs.h" #include <stdlib.h> @@ -29,9 +31,6 @@ error_t diskfs_alloc_node (struct node *dp, mode_t mode, struct node **npp) { struct disknode *dn; - struct node *np; - struct stat *st; - error_t err; dn = calloc (1, sizeof *dn); if (dn == 0) @@ -75,7 +74,7 @@ diskfs_free_node (struct node *np, mode_t mode) spin_lock (&diskfs_node_refcnt_lock); --num_files; - tmpfs_space_used -= sizeof *dn; + tmpfs_space_used -= sizeof *np->dn; spin_unlock (&diskfs_node_refcnt_lock); } @@ -106,7 +105,7 @@ diskfs_node_norefs (struct node *np) np->dn->u.reg.allocpages = np->allocsize / vm_page_size; break; case DT_CHR: - case DT_DEV: + case DT_BLK: np->dn->u.chr = np->dn_stat.st_rdev; break; } @@ -124,7 +123,7 @@ static void recompute_blocks (struct node *np) { struct disknode *const dn = np->dn; - struct stat *const st = np->dn_stat; + struct stat *const st = &np->dn_stat; st->st_blocks = sizeof *dn + dn->translen; switch (dn->type) @@ -137,7 +136,7 @@ recompute_blocks (struct node *np) st->st_blocks += st->st_size + 1; break; case DT_CHR: - case DT_DEV: + case DT_BLK: st->st_rdev = dn->u.chr; break; case DT_DIR: @@ -164,6 +163,8 @@ diskfs_cached_lookup (int inum, struct node **npp) } else { + struct stat *st; + /* Create the new node. */ np = diskfs_make_node (dn); np->cache_id = (ino_t) dn; @@ -174,7 +175,7 @@ diskfs_cached_lookup (int inum, struct node **npp) all_nodes = np; spin_unlock (&diskfs_node_refcnt_lock); - st = &dn->dn_stat; + st = &np->dn_stat; memset (st, 0, sizeof *st); st->st_fstype = FSTYPE_MEMFS; st->st_fsid = getpid (); @@ -320,8 +321,8 @@ create_symlink_hook (struct node *np, const char *target) if (np->dn_stat.st_size > 0) { const size_t size = np->dn_stat.st_size + 1; - char *const new = malloc (np->dn->u.lnk, size); - if (new == 0) + np->dn->u.lnk = malloc (size); + if (np->dn->u.lnk == 0) return ENOSPC; memcpy (np->dn->u.lnk, target, size); adjust_used (size); @@ -329,16 +330,17 @@ create_symlink_hook (struct node *np, const char *target) } return 0; } -error_t (*diskfs_read_symlink_hook)(struct node *np, char *target) - = read_symlink_hook; +error_t (*diskfs_create_symlink_hook)(struct node *np, const char *target) + = create_symlink_hook; static error_t read_symlink_hook (struct node *np, char *target) { memcpy (target, np->dn->u.lnk, np->dn_stat.st_size + 1); + return 0; } -error_t (*diskfs_create_symlink_hook)(struct node *np, const char *target) - = create_symlink_hook; +error_t (*diskfs_read_symlink_hook)(struct node *np, char *target) + = read_symlink_hook; void diskfs_write_disknode (struct node *np, int wait) diff --git a/tmpfs/tmpfs.c b/tmpfs/tmpfs.c index 1df0e04b..caef3861 100644 --- a/tmpfs/tmpfs.c +++ b/tmpfs/tmpfs.c @@ -17,6 +17,12 @@ You should have received a copy of the GNU General Public License along with the GNU Hurd; see the file COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include <argp.h> +#include <argz.h> +#include <string.h> +#include <inttypes.h> +#include <error.h> + #include "tmpfs.h" #include <limits.h> #include <version.h> @@ -122,7 +128,7 @@ parse_opt (int key, char *arg, struct argp_state *state) else { char *end = NULL; - intmax_t size = strtoimax (state->argv[state->next], 0, &end); + intmax_t size = strtoimax (state->argv[state->next], &end, 0); if (end == NULL || end == arg) { argp_error (state, "argument must be a number"); @@ -229,8 +235,8 @@ main (int argc, char **argv) error (0, err, "Cannot get host privileged port"); else { - err = vm_set_default_memory_manager (host, &default_pager); - mach_port_deallocate (mach_task_self (), host); + err = vm_set_default_memory_manager (host_priv, &default_pager); + mach_port_deallocate (mach_task_self (), host_priv); if (err) error (0, err, "Cannot get default pager port"); } diff --git a/tmpfs/tmpfs.h b/tmpfs/tmpfs.h index 19f05de5..4fb418a2 100644 --- a/tmpfs/tmpfs.h +++ b/tmpfs/tmpfs.h @@ -51,11 +51,6 @@ struct disknode } reg; struct { - mach_port_t memobj; - unsigned int allocpages; /* largest size while memobj was live */ - }; - struct - { struct tmpfs_dirent *entries; struct disknode *dotdot; } dir; |