From a1ee4950fee8163109c2018f0f44a2ec7ad5f4d5 Mon Sep 17 00:00:00 2001 From: Oliver Heidmann <oliver.heidmann@mpimet.mpg.de> Date: Fri, 19 Apr 2024 11:46:13 +0200 Subject: [PATCH] added nc memory write --- src/cdi.h | 3 ++- src/stream.c | 32 +++++++++++++++++++++----------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/cdi.h b/src/cdi.h index 97c655857..81d67f853 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 df3249dcc..cdbc645e4 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; -- GitLab