aboutsummaryrefslogtreecommitdiff
path: root/trans/hello-mt.c
diff options
context:
space:
mode:
authorThomas Schwinge <tschwinge@gnu.org>2006-06-15 13:52:31 +0000
committerThomas Schwinge <tschwinge@gnu.org>2006-06-15 13:52:31 +0000
commita55e2129494c2559df9fb6534356a423c6de728c (patch)
tree01a3215d48ee40e57972409b8d336c9e47b7b33b /trans/hello-mt.c
parent218307d36556c9e9a5cdbfc987419e16d56d352d (diff)
downloadhurd-a55e2129494c2559df9fb6534356a423c6de728c.tar.gz
hurd-a55e2129494c2559df9fb6534356a423c6de728c.tar.bz2
hurd-a55e2129494c2559df9fb6534356a423c6de728c.zip
2006-06-15 Thomas Schwinge <tschwinge@gnu.org>
* hello-mt.c (trivfs_S_io_seek): Seek into the right direction for `SEEK_END'. Return EINVAL if file pointer would become negative. * hello.c (trivfs_S_io_seek): Likewise.
Diffstat (limited to 'trans/hello-mt.c')
-rw-r--r--trans/hello-mt.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/trans/hello-mt.c b/trans/hello-mt.c
index cc338f92..b933cfde 100644
--- a/trans/hello-mt.c
+++ b/trans/hello-mt.c
@@ -1,5 +1,5 @@
/* hello-mt.c - A trivial single-file translator, multithreaded version
- Copyright (C) 1998,99,2001,02 Free Software Foundation, Inc.
+ Copyright (C) 1998,99,2001,02,2006 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
@@ -195,19 +195,22 @@ trivfs_S_io_seek (struct trivfs_protid *cred,
switch (whence)
{
- case SEEK_SET:
- op->offs = offs; break;
case SEEK_CUR:
- op->offs += offs; break;
+ offs += op->offs;
+ goto check;
case SEEK_END:
- op->offs = contents_len - offs; break;
+ offs += contents_len;
+ case SEEK_SET:
+ check:
+ if (offs >= 0)
+ {
+ *new_offs = op->offs = offs;
+ break;
+ }
default:
err = EINVAL;
}
- if (! err)
- *new_offs = op->offs;
-
mutex_unlock (&op->lock);
return err;