Doxygen Source Code Documentation
ncio.h File Reference
#include <stddef.h>
#include <sys/types.h>
#include "netcdf.h"
Go to the source code of this file.
Data Structures | |
struct | ncio |
Defines | |
#define | OFF_NONE ((off_t)(-1)) |
#define | RGN_NOLOCK 0x1 |
#define | RGN_NOWAIT 0x2 |
#define | RGN_WRITE 0x4 |
#define | RGN_MODIFIED 0x8 |
#define | NCIO_CONST const |
Typedefs | |
typedef ncio | ncio |
typedef int | ncio_relfunc (ncio *const nciop, off_t offset, int rflags) |
typedef int | ncio_getfunc (ncio *const nciop, off_t offset, size_t extent, int rflags, void **const vpp) |
typedef int | ncio_movefunc (ncio *const nciop, off_t to, off_t from, size_t nbytes, int rflags) |
typedef int | ncio_syncfunc (ncio *const nciop) |
typedef void | ncio_freefunc (void *const pvt) |
Functions | |
int | ncio_create (const char *path, int ioflags, size_t initialsz, off_t igeto, size_t igetsz, size_t *sizehintp, ncio **nciopp, void **const igetvpp) |
int | ncio_open (const char *path, int ioflags, off_t igeto, size_t igetsz, size_t *sizehintp, ncio **nciopp, void **const igetvpp) |
int | ncio_close (ncio *nciop, int doUnlink) |
Define Documentation
|
|
|
Definition at line 18 of file ncio.h. Referenced by ncio_ffio_free(), ncio_ffio_init(), ncio_ffio_rel(), ncio_px_free(), ncio_px_get(), ncio_px_init(), ncio_spx_free(), ncio_spx_init(), ncio_spx_rel(), px_get(), px_pgin(), px_pgout(), and rel_v1hs(). |
|
|
Definition at line 24 of file ncio.h. Referenced by ncio_ffio_move(), ncio_px_move(), and ncio_spx_move(). |
|
|
|
Typedef Documentation
|
|
|
Definition at line 75 of file ncio.h. Referenced by ncio_ffio_init(), ncio_px_init(), and ncio_spx_init(). |
|
Definition at line 52 of file ncio.h. Referenced by ncio_ffio_init(), ncio_px_init(), and ncio_spx_init(). |
|
Definition at line 61 of file ncio.h. Referenced by ncio_ffio_init(), ncio_px_init(), and ncio_spx_init(). |
|
Definition at line 45 of file ncio.h. Referenced by ncio_ffio_init(), ncio_px_init(), and ncio_spx_init(). |
|
Definition at line 68 of file ncio.h. Referenced by ncio_create(), ncio_ffio_init(), ncio_open(), ncio_px_init(), and ncio_spx_init(). |
Function Documentation
|
Definition at line 1319 of file posixio.c. References close(), ENOERR, ncio::fd, ncio_free(), ncio::path, ncio::sync, and unlink. Referenced by main(), nc__create_mp(), nc__open_mp(), nc_abort(), nc_close(), and nc_delete_mp().
|
|
Definition at line 1151 of file posixio.c. References blksize(), close(), ENOERR, fd, ncio::fd, fgrow(), fIsSet, fSet, ncio::get, ncio::ioflags, M_RNDUP, NC_DEFAULT_CREAT_MODE, ncio_free(), NCIO_MAXBLOCKSIZE, ncio_new(), ncio_px_init2(), ncio_spx_init2(), O_BINARY, and RGN_WRITE. Referenced by main(), and nc__create_mp().
01155 { 01156 ncio *nciop; 01157 int oflags = (O_RDWR|O_CREAT); 01158 int fd; 01159 int status; 01160 01161 if(initialsz < (size_t)igeto + igetsz) 01162 initialsz = (size_t)igeto + igetsz; 01163 01164 fSet(ioflags, NC_WRITE); 01165 01166 if(path == NULL || *path == 0) 01167 return EINVAL; 01168 01169 nciop = ncio_new(path, ioflags); 01170 if(nciop == NULL) 01171 return ENOMEM; 01172 01173 if(fIsSet(ioflags, NC_NOCLOBBER)) 01174 fSet(oflags, O_EXCL); 01175 else 01176 fSet(oflags, O_TRUNC); 01177 #ifdef O_BINARY 01178 fSet(oflags, O_BINARY); 01179 #endif 01180 #ifdef vms 01181 fd = open(path, oflags, NC_DEFAULT_CREAT_MODE, "ctx=stm"); 01182 #else 01183 /* Should we mess with the mode based on NC_SHARE ?? */ 01184 fd = open(path, oflags, NC_DEFAULT_CREAT_MODE); 01185 #endif 01186 #if 0 01187 (void) fprintf(stderr, "ncio_create(): path=\"%s\"\n", path); 01188 (void) fprintf(stderr, "ncio_create(): oflags=0x%x\n", oflags); 01189 #endif 01190 if(fd < 0) 01191 { 01192 status = errno; 01193 goto unwind_new; 01194 } 01195 *((int *)&nciop->fd) = fd; /* cast away const */ 01196 01197 if(*sizehintp < NCIO_MINBLOCKSIZE || *sizehintp > NCIO_MAXBLOCKSIZE) 01198 { 01199 /* Use default */ 01200 *sizehintp = blksize(fd); 01201 } 01202 else 01203 { 01204 *sizehintp = M_RNDUP(*sizehintp); 01205 } 01206 01207 if(fIsSet(nciop->ioflags, NC_SHARE)) 01208 status = ncio_spx_init2(nciop, sizehintp); 01209 else 01210 status = ncio_px_init2(nciop, sizehintp, 1); 01211 01212 if(status != ENOERR) 01213 goto unwind_open; 01214 01215 if(initialsz != 0) 01216 { 01217 status = fgrow(fd, (off_t)initialsz); 01218 if(status != ENOERR) 01219 goto unwind_open; 01220 } 01221 01222 if(igetsz != 0) 01223 { 01224 status = nciop->get(nciop, 01225 igeto, igetsz, 01226 RGN_WRITE, 01227 igetvpp); 01228 if(status != ENOERR) 01229 goto unwind_open; 01230 } 01231 01232 *nciopp = nciop; 01233 return ENOERR; 01234 01235 unwind_open: 01236 (void) close(fd); 01237 /* ?? unlink */ 01238 /*FALLTHRU*/ 01239 unwind_new: 01240 ncio_free(nciop); 01241 return status; 01242 } |
|
Definition at line 1246 of file posixio.c. References blksize(), close(), ENOERR, fd, ncio::fd, fIsSet, fSet, ncio::get, ncio::ioflags, M_RNDUP, ncio_free(), NCIO_MAXBLOCKSIZE, ncio_new(), ncio_px_init2(), ncio_spx_init2(), and O_BINARY. Referenced by main(), nc__open_mp(), and nc_delete_mp().
01250 { 01251 ncio *nciop; 01252 int oflags = fIsSet(ioflags, NC_WRITE) ? O_RDWR : O_RDONLY; 01253 int fd; 01254 int status; 01255 01256 if(path == NULL || *path == 0) 01257 return EINVAL; 01258 01259 nciop = ncio_new(path, ioflags); 01260 if(nciop == NULL) 01261 return ENOMEM; 01262 01263 #ifdef O_BINARY 01264 fSet(oflags, O_BINARY); 01265 #endif 01266 #ifdef vms 01267 fd = open(path, oflags, 0, "ctx=stm"); 01268 #else 01269 fd = open(path, oflags, 0); 01270 #endif 01271 if(fd < 0) 01272 { 01273 status = errno; 01274 goto unwind_new; 01275 } 01276 *((int *)&nciop->fd) = fd; /* cast away const */ 01277 01278 if(*sizehintp < NCIO_MINBLOCKSIZE || *sizehintp > NCIO_MAXBLOCKSIZE) 01279 { 01280 /* Use default */ 01281 *sizehintp = blksize(fd); 01282 } 01283 else 01284 { 01285 *sizehintp = M_RNDUP(*sizehintp); 01286 } 01287 01288 if(fIsSet(nciop->ioflags, NC_SHARE)) 01289 status = ncio_spx_init2(nciop, sizehintp); 01290 else 01291 status = ncio_px_init2(nciop, sizehintp, 0); 01292 01293 if(status != ENOERR) 01294 goto unwind_open; 01295 01296 if(igetsz != 0) 01297 { 01298 status = nciop->get(nciop, 01299 igeto, igetsz, 01300 0, 01301 igetvpp); 01302 if(status != ENOERR) 01303 goto unwind_open; 01304 } 01305 01306 *nciopp = nciop; 01307 return ENOERR; 01308 01309 unwind_open: 01310 (void) close(fd); 01311 /*FALLTHRU*/ 01312 unwind_new: 01313 ncio_free(nciop); 01314 return status; 01315 } |