Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2007-12-22 16:26:47 +0300
committerCorinna Vinschen <corinna@vinschen.de>2007-12-22 16:26:47 +0300
commit04cb518d64b68cc33024f33e5227d49ccf1afbf5 (patch)
treeea36f719bfbf0732df85de6ca199572569a313c1 /winsup/cygwin/fhandler_random.cc
parentec62ba9577e69bbecd6e8bfc20e5b9b049ed654d (diff)
* fhandler.h (class fhandler_dev_random): Add dummy_offset member.
* fhandler_random.cc (fhandler_dev_random::lseek): Fake seeking capability as on Linux.
Diffstat (limited to 'winsup/cygwin/fhandler_random.cc')
-rw-r--r--winsup/cygwin/fhandler_random.cc28
1 files changed, 26 insertions, 2 deletions
diff --git a/winsup/cygwin/fhandler_random.cc b/winsup/cygwin/fhandler_random.cc
index eecbe65bf..b8784b075 100644
--- a/winsup/cygwin/fhandler_random.cc
+++ b/winsup/cygwin/fhandler_random.cc
@@ -12,6 +12,7 @@ details. */
#include "winsup.h"
#include <limits.h>
+#include <unistd.h>
#include "cygerrno.h"
#include "security.h"
#include "path.h"
@@ -34,6 +35,7 @@ fhandler_dev_random::open (int flags, mode_t)
set_flags ((flags & ~O_TEXT) | O_BINARY);
nohandle (true);
set_open_status ();
+ dummy_offset = 0;
return 1;
}
@@ -140,9 +142,31 @@ fhandler_dev_random::read (void *ptr, size_t& len)
}
_off64_t
-fhandler_dev_random::lseek (_off64_t, int)
+fhandler_dev_random::lseek (_off64_t off, int whence)
{
- return 0;
+ /* As on Linux, fake being able to set an offset. The fact that neither
+ reading nor writing changes the dummy offset is also the same as on
+ Linux (tested with kernel 2.6.23). */
+ _off64_t new_off;
+
+ switch (whence)
+ {
+ case SEEK_SET:
+ new_off = off;
+ break;
+ case SEEK_CUR:
+ new_off = dummy_offset + off;
+ break;
+ default:
+ set_errno (EINVAL);
+ return (_off64_t) -1;
+ }
+ if (new_off < 0)
+ {
+ set_errno (EINVAL);
+ return (_off64_t) -1;
+ }
+ return dummy_offset = new_off;
}
int