Coverage Report

Created: 2025-07-23 09:13

/src/gdal/netcdf-c-4.7.4/liblib/nc_initialize.c
Line
Count
Source (jump to first uncovered line)
1
/*********************************************************************
2
 *   Copyright 2018, UCAR/Unidata
3
 *   See netcdf/COPYRIGHT file for copying and redistribution conditions.
4
 *********************************************************************/
5
6
#include "config.h"
7
8
#ifdef USE_PARALLEL
9
#include <mpi.h>
10
#endif
11
12
#include "ncdispatch.h"
13
14
extern int NC3_initialize(void);
15
extern int NC3_finalize(void);
16
17
#ifdef USE_NETCDF4
18
#include "nc4internal.h"
19
extern int NC4_initialize(void);
20
extern int NC4_finalize(void);
21
#endif
22
23
#ifdef USE_HDF5
24
#include "hdf5internal.h"
25
extern int NC_HDF5_initialize(void);
26
extern int NC_HDF5_finalize(void);
27
#endif
28
29
#ifdef ENABLE_DAP2
30
extern int NCD2_initialize(void);
31
extern int NCD2_finalize(void);
32
#endif
33
34
#ifdef ENABLE_DAP4
35
extern int NCD4_initialize(void);
36
extern int NCD4_finalize(void);
37
#endif
38
39
#ifdef USE_PNETCDF
40
extern int NCP_initialize(void);
41
extern int NCP_finalize(void);
42
#endif
43
44
#ifdef USE_HDF4
45
extern int NC_HDF4_initialize(void);
46
extern int NC_HDF4_finalize(void);
47
#endif
48
49
#ifdef _MSC_VER
50
#include <io.h>
51
#include <fcntl.h>
52
#endif
53
54
int NC_initialized = 0;
55
int NC_finalized = 1;
56
57
/**
58
This procedure invokes all defined
59
initializers, and there is an initializer
60
for every known dispatch table.
61
So if you modify the format of NC_Dispatch,
62
then you need to fix it everywhere.
63
It also initializes appropriate external libraries.
64
*/
65
66
int
67
nc_initialize()
68
9
{
69
9
    int stat = NC_NOERR;
70
71
9
    if(NC_initialized) return NC_NOERR;
72
9
    NC_initialized = 1;
73
9
    NC_finalized = 0;
74
75
    /* Do general initialization */
76
9
    if((stat = NCDISPATCH_initialize())) goto done;
77
78
    /* Initialize each active protocol */
79
9
    if((stat = NC3_initialize())) goto done;
80
#ifdef ENABLE_DAP
81
    if((stat = NCD2_initialize())) goto done;
82
#endif
83
#ifdef ENABLE_DAP4
84
    if((stat = NCD4_initialize())) goto done;
85
#endif
86
#ifdef USE_PNETCDF
87
    if((stat = NCP_initialize())) goto done;
88
#endif
89
9
#ifdef USE_NETCDF4
90
9
    if((stat = NC4_initialize())) goto done;
91
9
#endif /* USE_NETCDF4 */
92
9
#ifdef USE_HDF5
93
9
    if((stat = NC_HDF5_initialize())) goto done;
94
9
#endif
95
#ifdef USE_HDF4
96
    if((stat = NC_HDF4_initialize())) goto done;
97
#endif
98
99
9
done:
100
9
    return stat;
101
9
}
102
103
/**
104
This procedure invokes all defined
105
finalizers, and there should be one
106
for every known dispatch table.
107
So if you modify the format of NC_Dispatch,
108
then you need to fix it everywhere.
109
It also finalizes appropriate external libraries.
110
*/
111
112
int
113
nc_finalize(void)
114
0
{
115
0
    int stat = NC_NOERR;
116
117
0
    if(NC_finalized) return NC_NOERR;
118
0
    NC_initialized = 0;
119
0
    NC_finalized = 1;
120
121
    /* Finalize each active protocol */
122
123
#ifdef ENABLE_DAP2
124
    if((stat = NCD2_finalize())) return stat;
125
#endif
126
#ifdef ENABLE_DAP4
127
    if((stat = NCD4_finalize())) return stat;
128
#endif
129
130
#ifdef USE_PNETCDF
131
    if((stat = NCP_finalize())) return stat;
132
#endif
133
134
#ifdef USE_HDF4
135
    if((stat = NC_HDF4_finalize())) return stat;
136
#endif /* USE_HDF4 */
137
138
0
#ifdef USE_NETCDF4
139
0
    if((stat = NC4_finalize())) return stat;
140
0
#endif /* USE_NETCDF4 */
141
142
0
#ifdef USE_HDF5
143
0
    if((stat = NC_HDF5_finalize())) return stat;
144
0
#endif
145
146
0
    if((stat = NC3_finalize())) return stat;
147
148
    /* Do general finalization */
149
0
    if((stat = NCDISPATCH_finalize())) return stat;
150
151
0
    return NC_NOERR;
152
0
}