X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Frrd_open.c;h=9f4f6e2758a9095c657f2a19c90fcf1f3008d888;hb=13b88eef5c5fee3e33a06383315df6e57af605b0;hp=59526d8b4c3ae3c49582afbd6da2ee440e500123;hpb=cd6581d4edf9cd9c73f023eb9b1f5529959bf816;p=rrdtool.git diff --git a/src/rrd_open.c b/src/rrd_open.c index 59526d8..9f4f6e2 100644 --- a/src/rrd_open.c +++ b/src/rrd_open.c @@ -1,5 +1,5 @@ /***************************************************************************** - * RRDtool 1.3.2 Copyright by Tobi Oetiker, 1997-2008 + * RRDtool 1.4.3 Copyright by Tobi Oetiker, 1997-2010 ***************************************************************************** * rrd_open.c Open an RRD File ***************************************************************************** @@ -172,6 +172,9 @@ rrd_file_t *rrd_open( if (rdwr & RRD_CREAT) { flags |= (O_CREAT | O_TRUNC); } + if (rdwr & RRD_EXCL) { + flags |= O_EXCL; + } } if (rdwr & RRD_READAHEAD) { #ifdef MAP_POPULATE @@ -216,7 +219,10 @@ rrd_file_t *rrd_open( } else { rrd_file->file_len = newfile_size; lseek(rrd_simple_file->fd, newfile_size - 1, SEEK_SET); - write(rrd_simple_file->fd, "\0", 1); /* poke */ + if ( write(rrd_simple_file->fd, "\0", 1) == -1){ /* poke */ + rrd_set_error("write '%s': %s", file_name, rrd_strerror(errno)); + goto out_close; + } lseek(rrd_simple_file->fd, 0, SEEK_SET); } #ifdef HAVE_POSIX_FADVISE @@ -259,12 +265,14 @@ rrd_file_t *rrd_open( #ifdef USE_MADVISE if (rdwr & RRD_COPY) { /* We will read everything in a moment (copying) */ - madvise(data, rrd_file->file_len, MADV_WILLNEED | MADV_SEQUENTIAL); + madvise(data, rrd_file->file_len, MADV_WILLNEED ); + madvise(data, rrd_file->file_len, MADV_SEQUENTIAL ); } else { /* We do not need to read anything in for the moment */ madvise(data, rrd_file->file_len, MADV_RANDOM); /* the stat_head will be needed soonish, so hint accordingly */ - madvise(data, sizeof(stat_head_t), MADV_WILLNEED | MADV_RANDOM); + madvise(data, sizeof(stat_head_t), MADV_WILLNEED); + madvise(data, sizeof(stat_head_t), MADV_RANDOM); } #endif @@ -678,7 +686,7 @@ ssize_t rrd_write( /* this is a leftover from the old days, it serves no purpose and is therefore turned into a no-op */ void rrd_flush( - rrd_file_t *rrd_file __attribute__((unused))) + rrd_file_t UNUSED(*rrd_file)) { } @@ -740,10 +748,10 @@ void rrd_freemem( * aligning RRAs within stripes, or other performance enhancements */ void rrd_notify_row( - rrd_file_t *rrd_file __attribute__((unused)), - int rra_idx __attribute__((unused)), - unsigned long rra_row __attribute__((unused)), - time_t rra_time __attribute__((unused))) + rrd_file_t UNUSED(*rrd_file), + int UNUSED(rra_idx), + unsigned long UNUSED(rra_row), + time_t UNUSED(rra_time)) { } @@ -755,8 +763,8 @@ void rrd_notify_row( * don't change to a new disk block at the same time */ unsigned long rrd_select_initial_row( - rrd_file_t *rrd_file __attribute__((unused)), - int rra_idx __attribute__((unused)), + rrd_file_t UNUSED(*rrd_file), + int UNUSED(rra_idx), rra_def_t *rra ) {