00001 /* ***************************************************** */ 00002 /* get_attribute_str Get NetCDF string attribute. */ 00003 /* get_attribute_str.c */ 00004 /* ***************************************************** */ 00005 /* Author: Christian Page, CERFACS, Toulouse, France. */ 00006 /* ***************************************************** */ 00007 /* Date of creation: oct 2008 */ 00008 /* Last date of modification: oct 2008 */ 00009 /* ***************************************************** */ 00010 /* Original version: 1.0 */ 00011 /* Current revision: */ 00012 /* ***************************************************** */ 00013 /* Revisions */ 00014 /* ***************************************************** */ 00019 /* LICENSE BEGIN 00020 00021 Copyright Cerfacs (Christian Page) (2015) 00022 00023 christian.page@cerfacs.fr 00024 00025 This software is a computer program whose purpose is to downscale climate 00026 scenarios using a statistical methodology based on weather regimes. 00027 00028 This software is governed by the CeCILL license under French law and 00029 abiding by the rules of distribution of free software. You can use, 00030 modify and/ or redistribute the software under the terms of the CeCILL 00031 license as circulated by CEA, CNRS and INRIA at the following URL 00032 "http://www.cecill.info". 00033 00034 As a counterpart to the access to the source code and rights to copy, 00035 modify and redistribute granted by the license, users are provided only 00036 with a limited warranty and the software's author, the holder of the 00037 economic rights, and the successive licensors have only limited 00038 liability. 00039 00040 In this respect, the user's attention is drawn to the risks associated 00041 with loading, using, modifying and/or developing or reproducing the 00042 software by the user in light of its specific status of free software, 00043 that may mean that it is complicated to manipulate, and that also 00044 therefore means that it is reserved for developers and experienced 00045 professionals having in-depth computer knowledge. Users are therefore 00046 encouraged to load and test the software's suitability as regards their 00047 requirements in conditions enabling the security of their systems and/or 00048 data to be ensured and, more generally, to use and operate it in the 00049 same conditions as regards security. 00050 00051 The fact that you are presently reading this means that you have had 00052 knowledge of the CeCILL license and that you accept its terms. 00053 00054 LICENSE END */ 00055 00056 00057 00058 00059 00060 00061 00062 #include <io.h> 00063 00065 int 00066 get_attribute_str(char **var, int ncinid, int varid, char *attrname) 00067 { 00075 int istat; /* Diagnostic status */ 00076 size_t t_len; /* Length of attribute value string */ 00077 00078 /* Get attribute length */ 00079 istat = nc_inq_attlen(ncinid, varid, attrname, &t_len); 00080 if (istat == NC_NOERR) { 00081 /* Allocate required space before retrieving values */ 00082 (*var) = (char *) malloc(t_len + 1); 00083 if ((*var) == NULL) alloc_error(__FILE__, __LINE__); 00084 /* Get attribute value */ 00085 istat = nc_get_att_text(ncinid, varid, attrname, (*var)); 00086 if (istat != NC_NOERR) 00087 (*var)[0] = '\0'; 00088 else 00089 if ((*var)[t_len-1] != '\0') 00090 (*var)[t_len] = '\0'; /* null terminate if needed */ 00091 } 00092 else { 00093 /* Allocate required space */ 00094 (*var) = (char *) malloc(sizeof(char)); 00095 if ((*var) == NULL) alloc_error(__FILE__, __LINE__); 00096 (*var)[0] = '\0'; 00097 } 00098 00099 /* Diagnostic status */ 00100 return ((int) istat); 00101 }