Commit e3acb1187658dc7732d821c8a8383b164647fb57
- Diff rendering mode:
- inline
- side by side
test/unit/fstream_test.cpp
(11 / 1)
|   | |||
| 1 | // -*- C++ -*- Time-stamp: <09/10/22 23:31:10 ptr> | ||
| 1 | // -*- C++ -*- Time-stamp: <09/10/23 08:28:43 ptr> | ||
| 2 | 2 | ||
| 3 | 3 | /* | |
| 4 | 4 | * Copyright (c) 2004-2008 | |
| … | … | ||
| 304 | 304 | int EXAM_IMPL(fstream_test::rewind) | |
| 305 | 305 | { | |
| 306 | 306 | #ifdef __unix__ | |
| 307 | /* Bug ID 2881622: write fail after failed read-and-recovery */ | ||
| 307 | 308 | const char fname[] = "/tmp/stlport.test"; | |
| 308 | 309 | { | |
| 310 | // Create empty file for read and write | ||
| 309 | 311 | fstream f( fname, ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary ); | |
| 310 | 312 | ||
| 311 | 313 | int n = 0; | |
| … | … | ||
| 315 | 315 | EXAM_CHECK( f.is_open() ); | |
| 316 | 316 | EXAM_CHECK( f.good() ); | |
| 317 | 317 | ||
| 318 | // write to this file | ||
| 318 | 319 | f.write( (const char*)&n, sizeof(int) ); | |
| 319 | 320 | EXAM_CHECK( f.good() ); | |
| 321 | // rewind 'get' pointer to end | ||
| 320 | 322 | f.seekg( sizeof(int), ios_base::beg ); | |
| 321 | 323 | EXAM_CHECK( f.good() ); | |
| 324 | // try to read | ||
| 322 | 325 | f.read( (char *)&n, sizeof(int) ); | |
| 326 | // read operation fail, as expected | ||
| 323 | 327 | EXAM_CHECK( f.fail() ); | |
| 328 | // clear stream state | ||
| 324 | 329 | f.clear(); | |
| 325 | 330 | EXAM_CHECK( f.good() ); | |
| 326 | 331 | n = 0; | |
| 332 | // continue append to EOF | ||
| 327 | 333 | f.write( (const char*)&n, sizeof(int) ); | |
| 334 | // if bug #2881622 present, operation fail | ||
| 328 | 335 | EXAM_CHECK( f.good() ); | |
| 329 | 336 | } | |
| 337 | // check that we indeed wrote what expected: | ||
| 330 | 338 | { | |
| 331 | 339 | ifstream f( fname ); | |
| 332 | 340 | char c = -1; |

