diff --git a/src/cdi.h b/src/cdi.h index 97c655857f4cbb27c65201d236b15af6633f42df..81d67f8534fd9b3f392b6caadeadb17c511cd193 100644 --- a/src/cdi.h +++ b/src/cdi.h @@ -353,7 +353,8 @@ int cdiEncodeTime(int hour, int minute, int second); int cdiGetFiletype(const char *uri, int *byteorder); int cdiGetProtocol(const char *uri, const char **filename); -int streamOpenReadNCMem(int ncid); +int streamOpenReadNCMem(int ncid); +int streamOpenWriteNCMem(int ncid); // streamOpenRead: Open a dataset for reading int streamOpenRead(const char *path); diff --git a/src/stream.c b/src/stream.c index df3249dccb6ea56e3d26be5a2c6cc7ae38ee9250..cdbc645e42791a71a6b77372044d404f4e0524fd 100644 --- a/src/stream.c +++ b/src/stream.c @@ -714,9 +714,9 @@ streamOpenID(const char *filename, char filemode, int filetype, int resH) } int -streamOpenReadNCMem(int ncidp) +streamOpenNCMem(int ncidp, char mode) { - + cdiInitialize(); stream_t *streamptr = stream_new_entry(CDI_UNDEFID); int streamID = CDI_ESYSTEM; @@ -730,23 +730,34 @@ streamOpenReadNCMem(int ncidp) nc_inq_path(ncidp, &actual_length, filename); streamptr->filename = strdup(filename); - streamptr->filemode = 'r'; + streamptr->filemode = mode; streamptr->filetype = CDI_FILETYPE_NC4; streamptr->fileID = ncidp; - int status = stream_create_vlist(streamptr, NULL); - if (status < 0) + if (mode == 'r') { - streamID = status; - if (streamptr->record) Free(streamptr->record); - reshRemove(streamptr->self, &streamOps); + int status = stream_create_vlist(streamptr, NULL); + if (status < 0) + { + streamID = status; + if (streamptr->record) Free(streamptr->record); + reshRemove(streamptr->self, &streamOps); + } } - streamPrintP(streamptr, stdout); - return streamID; } +int +streamOpenReadNCMem(int ncidp) +{ + return streamOpenNCMem(ncidp, 'r'); +} +int +streamOpenWriteNCMem(int ncidp) +{ + return streamOpenNCMem(ncidp, 'w'); +} static int streamOpen(const char *filename, const char *filemode, int filetype) { @@ -931,7 +942,6 @@ streamOpenRead(const char *filename) if (streamptr->record) Free(streamptr->record); reshRemove(streamptr->self, &streamOps); } - streamPrintP(streamptr, stdout); } return streamID;