9 #define _XOPEN_SOURCE 700 17 #include <sys/types.h> 25 #include "sion_error_handler.h" 30 #if defined(_SION_LINUX) 31 #elif defined(_SION_AIX) 32 #elif defined(_SION_BGP) 50 #define DFUNCTION "_sion_buffer_check_env" 59 int rc = SION_SUCCESS;
65 DPRINTFP((2, DFUNCTION, -1,
"buffersize=%d\n", sion_filedesc->
buffer_size));
71 #define DFUNCTION "_sion_buffer_init" 79 int rc = SION_SUCCESS;
84 if (sion_filedesc->
buffer == NULL) {
85 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_buffer_init: cannot allocate internal buffer of size %lu , aborting ...\n", (
unsigned long) sion_filedesc->
buffer_size));
88 DPRINTFP((2, DFUNCTION, -1,
"buffer with size=%d allocated\n", sion_filedesc->
buffer_size));
94 #define DFUNCTION "_sion_buffer_push" 104 const void *data, sion_int64 bytes) {
105 sion_int64 bytes_free;
106 sion_int64 bytes_stored;
107 ONLY_DEBUG(sion_int64 bytes_not_stored;)
110 if(bytes<bytes_free) {
112 ONLY_DEBUG(bytes_not_stored=0;)
114 bytes_stored=bytes_free;
115 ONLY_DEBUG(bytes_not_stored=bytes-bytes_stored;)
122 DPRINTFP((2, DFUNCTION, -1,
"pushed %d of %d bytes into buffer -> ptr=%d ret=%d\n",
123 (
int) bytes_stored,(
int) bytes,
124 (
int) sion_filedesc->
buffer_ptr, (
int) bytes_not_stored));
125 return (bytes_stored);
129 #define DFUNCTION "_sion_buffer_get_data_ptr" 140 void **data, sion_int64 *bytes) {
144 *data=sion_filedesc->
buffer;
150 DPRINTFP((2, DFUNCTION, -1,
"returns data ptr to %d bytes, flag=%d\n",
151 (
int) *bytes, flag));
157 #define DFUNCTION "_sion_buffer_flush" 165 sion_int64 bbytes, frc, byteswritten;
169 DPRINTFP((1, DFUNCTION, -1,
"enter\n"));
177 if ((byteswritten + bbytes) > sion_filedesc->
chunksize) {
184 return(_sion_errorprint_on_rank(SION_ANSI_SIZE_NOT_VALID,_SION_ERROR_RETURN,sion_filedesc->
rank,
185 "could not write data (%d bytes) to file (sid=%d) ...", (
int) bbytes, sion_filedesc->
sid));
189 DPRINTFP((2, DFUNCTION, -1,
"leave\n"));
191 return (SION_SUCCESS);
sion_int64 _sion_file_write(const void *data, sion_int64 bytes, _sion_fileptr *sion_fileptr)
Write data to file.
int _sion_buffer_flush(_sion_filedesc *sion_filedesc)
Flush buffer.
int _sion_flush_block(_sion_filedesc *sion_filedesc)
Update the internal data structure.
int _sion_buffer_get_data_ptr(_sion_filedesc *sion_filedesc, void **data, sion_int64 *bytes)
Pop all data from buffer.
Sion File Descriptor Structure.
int _sion_buffer_init(_sion_filedesc *sion_filedesc)
Allocate and initalize the buffer.
sion_int64 _sion_buffer_push(_sion_filedesc *sion_filedesc, const void *data, sion_int64 bytes)
Push data to buffer.
char * _sion_getenv(const char *name)
int _sion_buffer_check_env(_sion_filedesc *sion_filedesc)
Checks if environment variables are set to use buffer.
sion_int32 currentblocknr
int _sion_create_new_block(_sion_filedesc *sion_filedesc)
Create a new block for the internal data structure.