From 8866749204162b2192bdf76d19cd6bc3ced21854 Mon Sep 17 00:00:00 2001 From: Thomas Bushnell Date: Tue, 18 Jul 2000 21:33:33 +0000 Subject: 2000-07-18 Thomas Bushnell, BSG * io-seek.c (diskfs_S_io_seek): Don't use CHANGE_NODE_FIELD anymore; it was causing problems and was a gross hack anyway. --- libdiskfs/io-seek.c | 58 +++++++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 28 deletions(-) (limited to 'libdiskfs/io-seek.c') diff --git a/libdiskfs/io-seek.c b/libdiskfs/io-seek.c index 33aa77d4..6bdd4195 100644 --- a/libdiskfs/io-seek.c +++ b/libdiskfs/io-seek.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1994, 1995, 1996 Free Software Foundation + Copyright (C) 1994, 1995, 1996, 2000 Free Software Foundation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -19,9 +19,6 @@ #include "io_S.h" #include -#define diskfs_readonly 0 -#define diskfs_synchronous 0 - /* Implement io_seek as described in . */ kern_return_t diskfs_S_io_seek (struct protid *cred, @@ -29,29 +26,34 @@ diskfs_S_io_seek (struct protid *cred, int whence, off_t *newoffset) { + error_t err = 0; + struct node *np; + + if (!cred) + return EOPNOTSUPP; + + np = cred->po->np; - CHANGE_NODE_FIELD (cred, - ({ - iohelp_get_conch (&np->conch); - switch (whence) - { - case SEEK_SET: - err = 0; - cred->po->filepointer = offset; - break; - case SEEK_CUR: - err = 0; - cred->po->filepointer += offset; - break; - case SEEK_END: - err = 0; - cred->po->filepointer = (np->dn_stat.st_size - + offset); - break; - default: - err = EINVAL; - break; - } - *newoffset = cred->po->filepointer; - })); + mutex_lock (&np->lock); + + iohelp_get_conch (&np->conch); + switch (whence) + { + case SEEK_SET: + cred->po->filepointer = offset; + break; + case SEEK_CUR: + cred->po->filepointer += offset; + break; + case SEEK_END: + cred->po->filepointer = (np->dn_stat.st_size + offset); + break; + default: + err = EINVAL; + break; + } + *newoffset = cred->po->filepointer; + + mutex_unlock (&np->lock); + return err; } -- cgit v1.2.3