xapian-core  1.4.26
Functions | Variables
io_utils.cc File Reference

Wrappers for low-level POSIX I/O routines. More...

#include <config.h>
#include "io_utils.h"
#include "posixy_wrapper.h"
#include "safeunistd.h"
#include <cerrno>
#include <cstring>
#include <string>
#include <xapian/error.h>
#include "noreturn.h"
#include "omassert.h"
#include "str.h"
+ Include dependency graph for io_utils.cc:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

bool io_unlink (const std::string &filename)
 Delete a file. More...
 
int io_open_block_wr (const char *fname, bool anew)
 Open a block-based file for writing. More...
 
size_t io_read (int fd, char *p, size_t n, size_t min)
 Read n bytes (or until EOF) into block pointed to by p from file descriptor fd. More...
 
void io_write (int fd, const char *p, size_t n)
 Write n bytes from block pointed to by p to file descriptor fd. More...
 
static void throw_block_error (const char *s, off_t b, int e=0)
 
void io_read_block (int fd, char *p, size_t n, off_t b, off_t o)
 Read block b size n bytes into buffer p from file descriptor fd, offset o. More...
 
void io_write_block (int fd, const char *p, size_t n, off_t b, off_t o)
 Write block b size n bytes from buffer p to file descriptor fd, offset o. More...
 
bool io_tmp_rename (const std::string &tmp_file, const std::string &real_file)
 Rename a temporary file to its final position. More...
 

Variables

const int MIN_WRITE_FD = 3
 

Detailed Description

Wrappers for low-level POSIX I/O routines.

Definition in file io_utils.cc.

Function Documentation

◆ io_open_block_wr()

int io_open_block_wr ( const char *  fname,
bool  anew 
)

Open a block-based file for writing.

Parameters
fnameThe path of the file to open.
anewIf true, open the file anew (create or truncate it).

Definition at line 67 of file io_utils.cc.

References Assert, close(), MIN_WRITE_FD, O_BINARY, O_CLOEXEC, and Xapian::InMemory::open().

Referenced by GlassTable::do_open_to_write(), ChertTable::do_open_to_write(), io_open_block_rd(), io_open_block_wr(), and test_ioblock1().

◆ io_read()

size_t io_read ( int  fd,
char *  p,
size_t  n,
size_t  min = 0 
)

Read n bytes (or until EOF) into block pointed to by p from file descriptor fd.

If a read error occurs, throws DatabaseError.

If min is specified and EOF is reached after less than min bytes, throws DatabaseCorruptError.

Returns the number of bytes actually read.

Definition at line 123 of file io_utils.cc.

Referenced by ChertTableCheck::check(), GlassChanges::check(), GlassDatabase::get_changeset_revisions(), ChertDatabase::get_changeset_revisions(), io_full_sync(), ChertTable_base::read(), GlassVersion::read(), ChertVersion::read_and_check(), and test_if_single_file_db().

◆ io_read_block()

void io_read_block ( int  fd,
char *  p,
size_t  n,
off_t  b,
off_t  o 
)

Read block b size n bytes into buffer p from file descriptor fd, offset o.

Definition at line 180 of file io_utils.cc.

References rare, throw_block_error(), and usual.

Referenced by io_readahead_block(), ChertTable::read_block(), GlassTable::read_block(), and test_ioblock1().

◆ io_tmp_rename()

bool io_tmp_rename ( const std::string &  tmp_file,
const std::string &  real_file 
)

Rename a temporary file to its final position.

Attempts to deal with NFS infelicities. If the rename fails, the temporary file is removed.

Returns
true if the rename succeeded; false if it failed (and errno will be set appropriately).

Definition at line 271 of file io_utils.cc.

References posixy_rename.

Referenced by GlassChanges::commit(), ChertTable::commit(), Xapian::Database::compact_(), io_write_block(), ChertDatabaseReplicator::process_changeset_chunk_base(), GlassDatabaseReplicator::process_changeset_chunk_version(), GlassVersion::sync(), and Xapian::DatabaseReplica::Internal::update_stub_database().

◆ io_unlink()

bool io_unlink ( const std::string &  filename)

Delete a file.

Parameters
filenameThe file to delete.
Exceptions
Xapian::DatabaseErroris thrown if filename existed but couldn't be unlinked.
Returns
true if filename was successfully removed; false if it didn't exist. If the file is on NFS, false may be returned even if the file was removed (if the server fails after removing the file but before telling the client, and the client then retries).

Definition at line 52 of file io_utils.cc.

References posixy_unlink.

Referenced by GlassChanges::commit(), ChertTable::create_and_open(), GlassTable::create_and_open(), ChertTable::erase(), io_write_block(), ChertDatabase::set_revision_number(), test_ioblock1(), ChertTable::write_block(), and GlassChanges::~GlassChanges().

◆ io_write()

void io_write ( int  fd,
const char *  p,
size_t  n 
)

◆ io_write_block()

void io_write_block ( int  fd,
const char *  p,
size_t  n,
off_t  b,
off_t  o 
)

◆ throw_block_error()

static void throw_block_error ( const char *  s,
off_t  b,
int  e = 0 
)
static

Definition at line 161 of file io_utils.cc.

References io_readahead_block(), and Xapian::Internal::str().

Referenced by io_read_block(), io_write(), and io_write_block().

Variable Documentation

◆ MIN_WRITE_FD

const int MIN_WRITE_FD = 3

Definition at line 64 of file io_utils.cc.

Referenced by io_open_block_wr().