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>2004-07-15 18:56:05 +0400
committerCorinna Vinschen <corinna@vinschen.de>2004-07-15 18:56:05 +0400
commit4243412aa5a9443a696cba6198a0daac3100ef3c (patch)
treed288baf81ad0ce74af97e257684d6538c78ae3d8
parentfcedcf9488de0113b50d22fca94d6a72ed59d576 (diff)
* fhandler.h (class fhandler_dev_raw): Remove is_writing flag.
Remove declaration of writebuf. (class fhandler_dev_floppy): Remove declaration of close. * fhandler_floppy.cc (fhandler_dev_floppy::close): Delete. (fhandler_dev_floppy::lseek): Remove calls to writebuf. Set eom_detected to false after successful seek. * fhandler_raw.cc (fhandler_dev_raw::writebuf): Delete. (fhandler_dev_raw::raw_read): Remove calls to writebuf. (fhandler_dev_raw::raw_write): Always invalidate buffer.
-rw-r--r--winsup/cygwin/ChangeLog12
-rw-r--r--winsup/cygwin/fhandler.h6
-rw-r--r--winsup/cygwin/fhandler_floppy.cc24
-rw-r--r--winsup/cygwin/fhandler_raw.cc41
4 files changed, 19 insertions, 64 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index 7c382e380..80e8af120 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,5 +1,17 @@
2004-07-15 Corinna Vinschen <corinna@vinschen.de>
+ * fhandler.h (class fhandler_dev_raw): Remove is_writing flag.
+ Remove declaration of writebuf.
+ (class fhandler_dev_floppy): Remove declaration of close.
+ * fhandler_floppy.cc (fhandler_dev_floppy::close): Delete.
+ (fhandler_dev_floppy::lseek): Remove calls to writebuf. Set
+ eom_detected to false after successful seek.
+ * fhandler_raw.cc (fhandler_dev_raw::writebuf): Delete.
+ (fhandler_dev_raw::raw_read): Remove calls to writebuf.
+ (fhandler_dev_raw::raw_write): Always invalidate buffer.
+
+2004-07-15 Corinna Vinschen <corinna@vinschen.de>
+
* mmap.cc (class mmap_record): Fix return type of get_offset.
(mmap_record::fixup_page_map): Fix off by one error.
(list::search_record): Use long as type of "start" argument in both,
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index c5f99f07a..3b7e6b4bc 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -482,22 +482,19 @@ class fhandler_dev_raw: public fhandler_base
unsigned eom_detected : 1;
unsigned eof_detected : 1;
unsigned lastblk_to_read : 1;
- unsigned is_writing : 1;
public:
status_flags () :
- eom_detected (0), eof_detected (0), lastblk_to_read (0), is_writing (0)
+ eom_detected (0), eof_detected (0), lastblk_to_read (0)
{}
} status;
IMPLEMENT_STATUS_FLAG (bool, eom_detected)
IMPLEMENT_STATUS_FLAG (bool, eof_detected)
IMPLEMENT_STATUS_FLAG (bool, lastblk_to_read)
- IMPLEMENT_STATUS_FLAG (bool, is_writing)
virtual BOOL write_file (const void *buf, DWORD to_write,
DWORD *written, int *err);
virtual BOOL read_file (void *buf, DWORD to_read, DWORD *read, int *err);
- virtual int writebuf (void);
/* returns not null, if `win_error' determines an end of media condition */
virtual int is_eom(int win_error);
@@ -535,7 +532,6 @@ class fhandler_dev_floppy: public fhandler_dev_raw
fhandler_dev_floppy ();
virtual int open (int flags, mode_t mode = 0);
- virtual int close (void);
virtual _off64_t lseek (_off64_t offset, int whence);
diff --git a/winsup/cygwin/fhandler_floppy.cc b/winsup/cygwin/fhandler_floppy.cc
index 2d17d99e6..88204dbbd 100644
--- a/winsup/cygwin/fhandler_floppy.cc
+++ b/winsup/cygwin/fhandler_floppy.cc
@@ -66,20 +66,6 @@ fhandler_dev_floppy::open (int flags, mode_t)
return fhandler_dev_raw::open (flags);
}
-int
-fhandler_dev_floppy::close (void)
-{
- int ret;
-
- ret = writebuf ();
- if (ret)
- {
- fhandler_dev_raw::close ();
- return ret;
- }
- return fhandler_dev_raw::close ();
-}
-
_off64_t
fhandler_dev_floppy::lseek (_off64_t offset, int whence)
{
@@ -144,10 +130,8 @@ fhandler_dev_floppy::lseek (_off64_t offset, int whence)
return -1;
}
current_position = low + ((_off64_t) high << 32);
- if (is_writing ())
- current_position += devbufend - devbufstart;
- else
- current_position -= devbufend - devbufstart;
+ /* devbufend and devbufstart are always 0 when writing. */
+ current_position -= devbufend - devbufstart;
lloffset += current_position;
whence = SEEK_SET;
@@ -167,9 +151,6 @@ fhandler_dev_floppy::lseek (_off64_t offset, int whence)
if (whence == SEEK_SET)
{
/* Invalidate buffer. */
- ret = writebuf ();
- if (ret)
- return ret;
devbufstart = devbufend = 0;
low = sector_aligned_offset & UINT32_MAX;
@@ -181,6 +162,7 @@ fhandler_dev_floppy::lseek (_off64_t offset, int whence)
return -1;
}
+ eom_detected (false);
size_t len = bytes_left;
raw_read (buf, len);
return sector_aligned_offset + bytes_left;
diff --git a/winsup/cygwin/fhandler_raw.cc b/winsup/cygwin/fhandler_raw.cc
index 2de7f3d5f..4ce444c1b 100644
--- a/winsup/cygwin/fhandler_raw.cc
+++ b/winsup/cygwin/fhandler_raw.cc
@@ -40,8 +40,7 @@ fhandler_dev_raw::is_eof (int)
}
-/* Wrapper functions to allow fhandler_dev_tape to detect and care for
- media changes and bus resets. */
+/* Wrapper functions to simplify error handling. */
BOOL
fhandler_dev_raw::write_file (const void *buf, DWORD to_write,
@@ -70,28 +69,6 @@ fhandler_dev_raw::read_file (void *buf, DWORD to_read, DWORD *read, int *err)
return ret;
}
-int
-fhandler_dev_raw::writebuf (void)
-{
- DWORD written;
- int ret = 0;
-
- if (is_writing () && devbuf && devbufend)
- {
- DWORD to_write;
- int ret = 0;
-
- memset (devbuf + devbufend, 0, devbufsiz - devbufend);
- to_write = ((devbufend - 1) / 512 + 1) * 512;
- if (!write_file (devbuf, to_write, &written, &ret)
- && is_eom (ret))
- eom_detected (true);
- devbufstart = devbufend = 0;
- }
- is_writing (false);
- return ret;
-}
-
fhandler_dev_raw::fhandler_dev_raw ()
: fhandler_base (), status ()
{
@@ -172,17 +149,6 @@ fhandler_dev_raw::raw_read (void *ptr, size_t& ulen)
char *tgt;
char *p = (char *) ptr;
- /* In mode O_RDWR the buffer has to be written to device first */
- ret = writebuf ();
- if (ret)
- {
- if (is_eom (ret))
- set_errno (ENOSPC);
- else
- __seterrno ();
- goto err;
- }
-
/* Checking a previous end of file */
if (eof_detected () && !lastblk_to_read ())
{
@@ -320,9 +286,8 @@ fhandler_dev_raw::raw_write (const void *ptr, size_t len)
return -1;
}
- if (!is_writing ())
- devbufstart = devbufend = 0;
- is_writing (true);
+ /* Invalidate buffer. */
+ devbufstart = devbufend = 0;
if (len > 0)
{