* fhandler.h (class fhandler_dev_random): Add dummy_offset member.
* fhandler_random.cc (fhandler_dev_random::lseek): Fake seeking capability as on Linux.
This commit is contained in:
parent
ec62ba9577
commit
04cb518d64
@ -1,3 +1,9 @@
|
|||||||
|
2007-12-22 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* fhandler.h (class fhandler_dev_random): Add dummy_offset member.
|
||||||
|
* fhandler_random.cc (fhandler_dev_random::lseek): Fake seeking
|
||||||
|
capability as on Linux.
|
||||||
|
|
||||||
2007-12-20 Eric Blake <ebb9@byu.net>
|
2007-12-20 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
* libc/memmem.cc (memmem): Fix bug when searching for empty string.
|
* libc/memmem.cc (memmem): Fix bug when searching for empty string.
|
||||||
|
@ -1090,6 +1090,7 @@ class fhandler_dev_random: public fhandler_base
|
|||||||
protected:
|
protected:
|
||||||
HCRYPTPROV crypt_prov;
|
HCRYPTPROV crypt_prov;
|
||||||
long pseudo;
|
long pseudo;
|
||||||
|
_off64_t dummy_offset;
|
||||||
|
|
||||||
bool crypt_gen_random (void *ptr, size_t len);
|
bool crypt_gen_random (void *ptr, size_t len);
|
||||||
int pseudo_write (const void *ptr, size_t len);
|
int pseudo_write (const void *ptr, size_t len);
|
||||||
|
@ -12,6 +12,7 @@ details. */
|
|||||||
|
|
||||||
#include "winsup.h"
|
#include "winsup.h"
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include "cygerrno.h"
|
#include "cygerrno.h"
|
||||||
#include "security.h"
|
#include "security.h"
|
||||||
#include "path.h"
|
#include "path.h"
|
||||||
@ -34,6 +35,7 @@ fhandler_dev_random::open (int flags, mode_t)
|
|||||||
set_flags ((flags & ~O_TEXT) | O_BINARY);
|
set_flags ((flags & ~O_TEXT) | O_BINARY);
|
||||||
nohandle (true);
|
nohandle (true);
|
||||||
set_open_status ();
|
set_open_status ();
|
||||||
|
dummy_offset = 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,9 +142,31 @@ fhandler_dev_random::read (void *ptr, size_t& len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
_off64_t
|
_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
|
int
|
||||||
|
Loading…
x
Reference in New Issue
Block a user