Indentation etc

This commit is contained in:
Shahram Najm 2013-04-16 17:53:48 +01:00
parent e1b61ba4a2
commit 7d45173851
8 changed files with 1711 additions and 1711 deletions

View File

@ -2,7 +2,7 @@
# #
# This software is licensed under the terms of the Apache Licence Version 2.0 # This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. # which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
# #
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by # In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction. # virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
# #

View File

@ -143,487 +143,487 @@ static void init_class(grib_accessor_class* c)
static int grib_load_codetable(grib_context* c,const char* filename, static int grib_load_codetable(grib_context* c,const char* filename,
const char* recomposed_name,size_t size,grib_codetable* t); const char* recomposed_name,size_t size,grib_codetable* t);
static void init(grib_accessor* a, const long len, grib_arguments* params) { static void init(grib_accessor* a, const long len, grib_arguments* params) {
int n=0; int n=0;
grib_accessor_codetable* self = (grib_accessor_codetable*)a; grib_accessor_codetable* self = (grib_accessor_codetable*)a;
grib_action* act=(grib_action*)(a->creator); grib_action* act=(grib_action*)(a->creator);
self->tablename = grib_arguments_get_string(a->parent->h,params,n++); self->tablename = grib_arguments_get_string(a->parent->h,params,n++);
self->masterDir = grib_arguments_get_name(a->parent->h,params,n++); self->masterDir = grib_arguments_get_name(a->parent->h,params,n++);
self->localDir = grib_arguments_get_name(a->parent->h,params,n++); self->localDir = grib_arguments_get_name(a->parent->h,params,n++);
/*if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) /*if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE)
printf("-------- %s type string (%ld)\n",a->name,a->flags);*/ printf("-------- %s type string (%ld)\n",a->name,a->flags);*/
if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) {
a->length = 0; a->length = 0;
if (!a->vvalue) if (!a->vvalue)
a->vvalue = grib_context_malloc_clear(a->parent->h->context,sizeof(grib_virtual_value)); a->vvalue = grib_context_malloc_clear(a->parent->h->context,sizeof(grib_virtual_value));
a->vvalue->type=grib_accessor_get_native_type(a); a->vvalue->type=grib_accessor_get_native_type(a);
a->vvalue->length=len; a->vvalue->length=len;
if (act->default_value!=NULL) { if (act->default_value!=NULL) {
const char* p = 0; const char* p = 0;
size_t len = 1; size_t len = 1;
long l; long l;
int ret=0; int ret=0;
double d; double d;
char tmp[1024]; char tmp[1024];
grib_expression* expression=grib_arguments_get_expression(a->parent->h,act->default_value,0); grib_expression* expression=grib_arguments_get_expression(a->parent->h,act->default_value,0);
int type = grib_expression_native_type(a->parent->h,expression); int type = grib_expression_native_type(a->parent->h,expression);
switch(type) { switch(type) {
case GRIB_TYPE_DOUBLE: case GRIB_TYPE_DOUBLE:
grib_expression_evaluate_double(a->parent->h,expression,&d); grib_expression_evaluate_double(a->parent->h,expression,&d);
grib_pack_double(a,&d,&len); grib_pack_double(a,&d,&len);
break; break;
case GRIB_TYPE_LONG: case GRIB_TYPE_LONG:
grib_expression_evaluate_long(a->parent->h,expression,&l); grib_expression_evaluate_long(a->parent->h,expression,&l);
grib_pack_long(a,&l,&len); grib_pack_long(a,&l,&len);
break; break;
default: default:
len = sizeof(tmp); len = sizeof(tmp);
p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret); p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret);
if (ret != GRIB_SUCCESS) { if (ret != GRIB_SUCCESS) {
grib_context_log(a->parent->h->context,GRIB_LOG_FATAL, grib_context_log(a->parent->h->context,GRIB_LOG_FATAL,
"unable to evaluate %s as string",a->name); "unable to evaluate %s as string",a->name);
} }
len = strlen(p)+1; len = strlen(p)+1;
pack_string(a,p,&len); pack_string(a,p,&len);
break; break;
} }
} }
} else } else
a->length = len; a->length = len;
} }
static grib_codetable* load_table(grib_accessor_codetable* self) static grib_codetable* load_table(grib_accessor_codetable* self)
{ {
size_t size = 0; size_t size = 0;
grib_handle* h = ((grib_accessor*)self)->parent->h; grib_handle* h = ((grib_accessor*)self)->parent->h;
grib_context* c = h->context; grib_context* c = h->context;
grib_codetable* t = NULL; grib_codetable* t = NULL;
grib_codetable* next=NULL ; grib_codetable* next=NULL ;
grib_accessor* a=(grib_accessor*)self; grib_accessor* a=(grib_accessor*)self;
char *filename=0; char *filename=0;
char name[1024]={0,}; char name[1024]={0,};
char recomposed[1024]={0,}; char recomposed[1024]={0,};
char localRecomposed[1024]={0,}; char localRecomposed[1024]={0,};
char *localFilename=0; char *localFilename=0;
char localName[1024]={0,}; char localName[1024]={0,};
char masterDir[1024]={0,}; char masterDir[1024]={0,};
char localDir[1024]={0,}; char localDir[1024]={0,};
size_t len=1024; size_t len=1024;
if (self->masterDir != NULL) if (self->masterDir != NULL)
grib_get_string(h,self->masterDir,masterDir,&len); grib_get_string(h,self->masterDir,masterDir,&len);
len=1024; len=1024;
if (self->localDir != NULL) if (self->localDir != NULL)
grib_get_string(h,self->localDir,localDir,&len); grib_get_string(h,self->localDir,localDir,&len);
if (*masterDir!=0) { if (*masterDir!=0) {
sprintf(name,"%s/%s",masterDir,self->tablename); sprintf(name,"%s/%s",masterDir,self->tablename);
grib_recompose_name(h, NULL,name, recomposed,0); grib_recompose_name(h, NULL,name, recomposed,0);
filename=grib_context_full_defs_path(c,recomposed); filename=grib_context_full_defs_path(c,recomposed);
} else { } else {
grib_recompose_name(h, NULL,self->tablename, recomposed,0); grib_recompose_name(h, NULL,self->tablename, recomposed,0);
filename=grib_context_full_defs_path(c,recomposed); filename=grib_context_full_defs_path(c,recomposed);
} }
if (*localDir!=0) { if (*localDir!=0) {
sprintf(localName,"%s/%s",localDir,self->tablename); sprintf(localName,"%s/%s",localDir,self->tablename);
grib_recompose_name(h, NULL,localName, localRecomposed,0); grib_recompose_name(h, NULL,localName, localRecomposed,0);
localFilename=grib_context_full_defs_path(c,localRecomposed); localFilename=grib_context_full_defs_path(c,localRecomposed);
} }
next=c->codetable;
while(next) {
if((filename && next->filename[0] && strcmp(filename,next->filename[0]) == 0) &&
((localFilename==0 && next->filename[1]==NULL) ||
((localFilename!=0 && next->filename[1]!=NULL)
&& strcmp(localFilename,next->filename[1]) ==0)) )
return next;
next = next->next;
}
if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { next=c->codetable;
Assert(a->vvalue!=NULL); while(next) {
size=a->vvalue->length*8; if((filename && next->filename[0] && strcmp(filename,next->filename[0]) == 0) &&
} else { ((localFilename==0 && next->filename[1]==NULL) ||
size = grib_byte_count((grib_accessor*)self) * 8; ((localFilename!=0 && next->filename[1]!=NULL)
} && strcmp(localFilename,next->filename[1]) ==0)) )
size = grib_power(size,2); return next;
next = next->next;
}
t = (grib_codetable*)grib_context_malloc_clear_persistent(c,sizeof(grib_codetable) + if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) {
(size-1)*sizeof(code_table_entry)); Assert(a->vvalue!=NULL);
size=a->vvalue->length*8;
} else {
size = grib_byte_count((grib_accessor*)self) * 8;
}
size = grib_power(size,2);
if (filename!=0) grib_load_codetable(c,filename,recomposed,size,t); t = (grib_codetable*)grib_context_malloc_clear_persistent(c,sizeof(grib_codetable) +
(size-1)*sizeof(code_table_entry));
if (localFilename!=0) grib_load_codetable(c,localFilename,localRecomposed,size,t); if (filename!=0) grib_load_codetable(c,filename,recomposed,size,t);
if (t->filename[0]==NULL && t->filename[1]==NULL) { if (localFilename!=0) grib_load_codetable(c,localFilename,localRecomposed,size,t);
grib_context_free_persistent(c,t);
return NULL; if (t->filename[0]==NULL && t->filename[1]==NULL) {
} grib_context_free_persistent(c,t);
return NULL;
return t; }
return t;
} }
static int grib_load_codetable(grib_context* c,const char* filename, static int grib_load_codetable(grib_context* c,const char* filename,
const char* recomposed_name,size_t size,grib_codetable* t) { const char* recomposed_name,size_t size,grib_codetable* t) {
char line[1024]; char line[1024];
FILE *f = NULL; FILE *f = NULL;
int lineNumber = 0; int lineNumber = 0;
grib_context_log(c,GRIB_LOG_DEBUG,"Loading code table form %s",filename); grib_context_log(c,GRIB_LOG_DEBUG,"Loading code table form %s",filename);
f=fopen(filename, "r"); f=fopen(filename, "r");
if (!f) return GRIB_IO_PROBLEM; if (!f) return GRIB_IO_PROBLEM;
Assert(t!=NULL); Assert(t!=NULL);
if (t->filename[0] == NULL ){ if (t->filename[0] == NULL ){
t->filename[0] = grib_context_strdup_persistent(c,filename); t->filename[0] = grib_context_strdup_persistent(c,filename);
t->recomposed_name[0] = grib_context_strdup_persistent(c,recomposed_name); t->recomposed_name[0] = grib_context_strdup_persistent(c,recomposed_name);
t->next = c->codetable; t->next = c->codetable;
t->size = size; t->size = size;
c->codetable = t; c->codetable = t;
} else { } else {
t->filename[1] = grib_context_strdup_persistent(c,filename); t->filename[1] = grib_context_strdup_persistent(c,filename);
t->recomposed_name[1] = grib_context_strdup_persistent(c,recomposed_name); t->recomposed_name[1] = grib_context_strdup_persistent(c,recomposed_name);
} }
while(fgets(line,sizeof(line)-1,f)) while(fgets(line,sizeof(line)-1,f))
{ {
char* p = line; char* p = line;
int code = 0; int code = 0;
char abbreviation[1024] = {0,}; char abbreviation[1024] = {0,};
char title[1024]={0,}; char title[1024]={0,};
char* q = abbreviation; char* q = abbreviation;
char* r = title; char* r = title;
char* units=0; char* units=0;
char unknown[]="unknown"; char unknown[]="unknown";
++lineNumber; ++lineNumber;
line[strlen(line)-1] = 0; line[strlen(line)-1] = 0;
while(*p != '\0' && isspace(*p)) p++; while(*p != '\0' && isspace(*p)) p++;
if(*p == '#') if(*p == '#')
continue; continue;
while(*p != '\0' && isspace(*p)) p++; while(*p != '\0' && isspace(*p)) p++;
if( *p =='\0' ) continue; if( *p =='\0' ) continue;
if (!isdigit(*p)) if (!isdigit(*p))
{ {
grib_context_log(c,GRIB_LOG_ERROR, "Invalid entry in file %s: line %d", filename, lineNumber); grib_context_log(c,GRIB_LOG_ERROR, "Invalid entry in file %s: line %d", filename, lineNumber);
continue; /* skip this line */ continue; /* skip this line */
} }
Assert(isdigit(*p)); Assert(isdigit(*p));
while(*p != '\0') while(*p != '\0')
{ {
if(isspace(*p)) break; if(isspace(*p)) break;
code *= 10; code *= 10;
code += *p - '0'; code += *p - '0';
p++; p++;
} }
if(code <0 || code >= size) if(code <0 || code >= size)
{ {
grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: invalide code in %s: %d (table size=%d)",filename,code,size); grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: invalide code in %s: %d (table size=%d)",filename,code,size);
continue; continue;
} }
while(*p != '\0' && isspace(*p)) p++; while(*p != '\0' && isspace(*p)) p++;
while(*p != '\0') while(*p != '\0')
{ {
if(isspace(*p)) break; if(isspace(*p)) break;
*q++ = *p++; *q++ = *p++;
} }
*q = 0; *q = 0;
while(*p != '\0' && isspace(*p)) p++; while(*p != '\0' && isspace(*p)) p++;
while(*p != '\0') while(*p != '\0')
{ {
if(*p == '(' ) break; if(*p == '(' ) break;
*r++ = *p++; *r++ = *p++;
} }
*r = 0; *r = 0;
while(*p != '\0' && isspace(*p)) p++; while(*p != '\0' && isspace(*p)) p++;
if (*p != '\0') { if (*p != '\0') {
units=++p; units=++p;
while(*p != '\0' && *p != ')' ) p++; while(*p != '\0' && *p != ')' ) p++;
*p='\0'; *p='\0';
} else { } else {
units=unknown; units=unknown;
} }
Assert(*abbreviation); Assert(*abbreviation);
Assert(*title); Assert(*title);
if(t->entries[code].abbreviation != NULL) if(t->entries[code].abbreviation != NULL)
{ {
grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: duplicate code in %s: %d (table size=%d)",filename,code,size); grib_context_log(c,GRIB_LOG_WARNING,"code_table_entry: duplicate code in %s: %d (table size=%d)",filename,code,size);
continue; continue;
} }
Assert(t->entries[code].abbreviation == NULL); Assert(t->entries[code].abbreviation == NULL);
Assert(t->entries[code].title == NULL); Assert(t->entries[code].title == NULL);
t->entries[code].abbreviation = grib_context_strdup_persistent(c,abbreviation); t->entries[code].abbreviation = grib_context_strdup_persistent(c,abbreviation);
t->entries[code].title = grib_context_strdup_persistent(c,title); t->entries[code].title = grib_context_strdup_persistent(c,title);
t->entries[code].units = grib_context_strdup_persistent(c,units); t->entries[code].units = grib_context_strdup_persistent(c,units);
} }
fclose(f); fclose(f);
return 0; return 0;
} }
void grib_codetable_delete(grib_context* c) { void grib_codetable_delete(grib_context* c) {
grib_codetable* t = c->codetable; grib_codetable* t = c->codetable;
while(t) while(t)
{ {
grib_codetable* s = t->next; grib_codetable* s = t->next;
int i; int i;
for(i = 0; i < t->size; i++) for(i = 0; i < t->size; i++)
{ {
grib_context_free_persistent(c,t->entries[i].abbreviation); grib_context_free_persistent(c,t->entries[i].abbreviation);
grib_context_free_persistent(c,t->entries[i].title); grib_context_free_persistent(c,t->entries[i].title);
} }
grib_context_free_persistent(c,t->filename[0]); grib_context_free_persistent(c,t->filename[0]);
if(t->filename[1]) if(t->filename[1])
grib_context_free_persistent(c,t->filename[1]); grib_context_free_persistent(c,t->filename[1]);
grib_context_free_persistent(c,t->recomposed_name[0]); grib_context_free_persistent(c,t->recomposed_name[0]);
if (t->recomposed_name[1]) if (t->recomposed_name[1])
grib_context_free_persistent(c,t->recomposed_name[1]); grib_context_free_persistent(c,t->recomposed_name[1]);
grib_context_free_persistent(c,t); grib_context_free_persistent(c,t);
t = s; t = s;
} }
} }
static void dump(grib_accessor* a, grib_dumper* dumper) { static void dump(grib_accessor* a, grib_dumper* dumper) {
grib_accessor_codetable* self = (grib_accessor_codetable*)a; grib_accessor_codetable* self = (grib_accessor_codetable*)a;
char comment[2048]; char comment[2048];
grib_codetable* table; grib_codetable* table;
size_t llen = 1; size_t llen = 1;
long value; long value;
if(!self->table) self->table = load_table(self); if(!self->table) self->table = load_table(self);
table=self->table; table=self->table;
grib_unpack_long(a, &value,&llen); grib_unpack_long(a, &value,&llen);
if(value == GRIB_MISSING_LONG) if(value == GRIB_MISSING_LONG)
{ {
if(a->length < 4) if(a->length < 4)
{ {
value = (1L << a->length) - 1; value = (1L << a->length) - 1;
} }
} }
if(table && value >= 0 && value < table->size) if(table && value >= 0 && value < table->size)
{ {
if(table->entries[value].abbreviation) if(table->entries[value].abbreviation)
{ {
int b = atol(table->entries[value].abbreviation); int b = atol(table->entries[value].abbreviation);
if(b == value) if(b == value)
strcpy(comment,table->entries[value].title); strcpy(comment,table->entries[value].title);
else else
sprintf(comment,"%s", table->entries[value].title); sprintf(comment,"%s", table->entries[value].title);
if (table->entries[value].units!=NULL && strcmp(table->entries[value].units,"unknown")) { if (table->entries[value].units!=NULL && strcmp(table->entries[value].units,"unknown")) {
strcat(comment," ("); strcat(comment," (");
strcat(comment,table->entries[value].units); strcat(comment,table->entries[value].units);
strcat(comment,") "); strcat(comment,") ");
} }
} }
else else
{ {
strcpy(comment,"Unknown code table entry"); strcpy(comment,"Unknown code table entry");
} }
} }
else else
{ {
strcpy(comment,"Unknown code table entry"); strcpy(comment,"Unknown code table entry");
} }
strcat(comment," ("); strcat(comment," (");
if (table) { if (table) {
strcat(comment,table->recomposed_name[0]); strcat(comment,table->recomposed_name[0]);
if (table->recomposed_name[1]!=NULL) { if (table->recomposed_name[1]!=NULL) {
strcat(comment," , "); strcat(comment," , ");
strcat(comment,table->recomposed_name[1]); strcat(comment,table->recomposed_name[1]);
} }
} }
strcat(comment,") "); strcat(comment,") ");
grib_dump_long(dumper,a,comment); grib_dump_long(dumper,a,comment);
} }
static int unpack_string (grib_accessor* a, char* buffer, size_t *len) static int unpack_string (grib_accessor* a, char* buffer, size_t *len)
{ {
grib_accessor_codetable* self = (grib_accessor_codetable*)a; grib_accessor_codetable* self = (grib_accessor_codetable*)a;
grib_codetable* table = NULL; grib_codetable* table = NULL;
size_t size = 1; size_t size = 1;
long value; long value;
int err = GRIB_SUCCESS; int err = GRIB_SUCCESS;
char tmp[1024]; char tmp[1024];
size_t l = 0; size_t l = 0;
if( (err = grib_unpack_long(a,&value,&size)) != GRIB_SUCCESS) if( (err = grib_unpack_long(a,&value,&size)) != GRIB_SUCCESS)
return err; return err;
if(!self->table) self->table = load_table(self); if(!self->table) self->table = load_table(self);
table=self->table; table=self->table;
if(table && (value >= 0) && (value < table->size) && table->entries[value].abbreviation) if(table && (value >= 0) && (value < table->size) && table->entries[value].abbreviation)
{ {
strcpy(tmp,table->entries[value].abbreviation); strcpy(tmp,table->entries[value].abbreviation);
} }
else else
{ {
#if 1 #if 1
sprintf(tmp,"%d",(int)value); sprintf(tmp,"%d",(int)value);
#else #else
return GRIB_DECODING_ERROR; return GRIB_DECODING_ERROR;
#endif #endif
} }
l = strlen(tmp) + 1; l = strlen(tmp) + 1;
if(*len < l) if(*len < l)
{ {
*len = l; *len = l;
return GRIB_BUFFER_TOO_SMALL; return GRIB_BUFFER_TOO_SMALL;
} }
strcpy(buffer,tmp); strcpy(buffer,tmp);
*len = l; *len = l;
return GRIB_SUCCESS; return GRIB_SUCCESS;
} }
static long value_count(grib_accessor* a) static long value_count(grib_accessor* a)
{ {
return 1; return 1;
} }
static int pack_string(grib_accessor* a, const char* buffer, size_t *len) static int pack_string(grib_accessor* a, const char* buffer, size_t *len)
{ {
grib_accessor_codetable* self = (grib_accessor_codetable*)a; grib_accessor_codetable* self = (grib_accessor_codetable*)a;
grib_codetable* table ; grib_codetable* table ;
long i; long i;
size_t size = 1; size_t size = 1;
typedef int (*cmpproc)(const char*, const char*); typedef int (*cmpproc)(const char*, const char*);
#ifndef GRIB_ON_WINDOWS #ifndef GRIB_ON_WINDOWS
cmpproc cmp = a->flags | GRIB_ACCESSOR_FLAG_LOWERCASE ? strcasecmp : strcmp; cmpproc cmp = a->flags | GRIB_ACCESSOR_FLAG_LOWERCASE ? strcasecmp : strcmp;
#else #else
/* Microsoft Windows Visual Studio support */ /* Microsoft Windows Visual Studio support */
cmpproc cmp = a->flags | GRIB_ACCESSOR_FLAG_LOWERCASE ? stricmp : strcmp; cmpproc cmp = a->flags | GRIB_ACCESSOR_FLAG_LOWERCASE ? stricmp : strcmp;
#endif #endif
if(!self->table) self->table = load_table(self); if(!self->table) self->table = load_table(self);
table=self->table; table=self->table;
if(!table) if(!table)
return GRIB_ENCODING_ERROR; return GRIB_ENCODING_ERROR;
if (a->set) { if (a->set) {
int err=grib_set_string(a->parent->h,a->set,buffer,len); int err=grib_set_string(a->parent->h,a->set,buffer,len);
if (err!=0) return err; if (err!=0) return err;
} }
for(i = 0 ; i < table->size; i++) for(i = 0 ; i < table->size; i++)
if(table->entries[i].abbreviation) if(table->entries[i].abbreviation)
if(cmp(table->entries[i].abbreviation,buffer) == 0) if(cmp(table->entries[i].abbreviation,buffer) == 0)
return grib_pack_long(a,&i,&size); return grib_pack_long(a,&i,&size);
if (a->flags & GRIB_ACCESSOR_FLAG_NO_FAIL) { if (a->flags & GRIB_ACCESSOR_FLAG_NO_FAIL) {
grib_action* act=(grib_action*)(a->creator); grib_action* act=(grib_action*)(a->creator);
if (act->default_value!=NULL) { if (act->default_value!=NULL) {
const char* p = 0; const char* p = 0;
size_t len = 1; size_t len = 1;
long l; long l;
int ret=0; int ret=0;
double d; double d;
char tmp[1024]; char tmp[1024];
grib_expression* expression=grib_arguments_get_expression(a->parent->h,act->default_value,0); grib_expression* expression=grib_arguments_get_expression(a->parent->h,act->default_value,0);
int type = grib_expression_native_type(a->parent->h,expression); int type = grib_expression_native_type(a->parent->h,expression);
switch(type) { switch(type) {
case GRIB_TYPE_DOUBLE: case GRIB_TYPE_DOUBLE:
grib_expression_evaluate_double(a->parent->h,expression,&d); grib_expression_evaluate_double(a->parent->h,expression,&d);
grib_pack_double(a,&d,&len); grib_pack_double(a,&d,&len);
break; break;
case GRIB_TYPE_LONG: case GRIB_TYPE_LONG:
grib_expression_evaluate_long(a->parent->h,expression,&l); grib_expression_evaluate_long(a->parent->h,expression,&l);
grib_pack_long(a,&l,&len); grib_pack_long(a,&l,&len);
break; break;
default: default:
len = sizeof(tmp); len = sizeof(tmp);
p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret); p = grib_expression_evaluate_string(a->parent->h,expression,tmp,&len,&ret);
if (ret != GRIB_SUCCESS) { if (ret != GRIB_SUCCESS) {
grib_context_log(a->parent->h->context,GRIB_LOG_FATAL, grib_context_log(a->parent->h->context,GRIB_LOG_FATAL,
"unable to evaluate %s as string",a->name); "unable to evaluate %s as string",a->name);
return ret; return ret;
} }
len = strlen(p)+1; len = strlen(p)+1;
pack_string(a,p,&len); pack_string(a,p,&len);
break; break;
} }
return GRIB_SUCCESS; return GRIB_SUCCESS;
} }
} }
return GRIB_ENCODING_ERROR; return GRIB_ENCODING_ERROR;
} }
static int pack_expression(grib_accessor* a, grib_expression *e){ static int pack_expression(grib_accessor* a, grib_expression *e){
const char* cval; const char* cval;
int ret=0; int ret=0;
long lval=0; long lval=0;
size_t len = 1; size_t len = 1;
char tmp[1024]; char tmp[1024];
if (strcmp(e->cclass->name,"long")==0) { if (strcmp(e->cclass->name,"long")==0) {
ret=grib_expression_evaluate_long(a->parent->h,e,&lval); ret=grib_expression_evaluate_long(a->parent->h,e,&lval);
ret = grib_pack_long(a,&lval,&len); ret = grib_pack_long(a,&lval,&len);
} else { } else {
len = sizeof(tmp); len = sizeof(tmp);
cval = grib_expression_evaluate_string(a->parent->h,e,tmp,&len,&ret); cval = grib_expression_evaluate_string(a->parent->h,e,tmp,&len,&ret);
if (ret!=GRIB_SUCCESS) { if (ret!=GRIB_SUCCESS) {
grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"grib_accessor_codetable.pack_expression: unable to evaluate string %s to be set in %s\n",grib_expression_get_name(e),a->name); grib_context_log(a->parent->h->context,GRIB_LOG_ERROR,"grib_accessor_codetable.pack_expression: unable to evaluate string %s to be set in %s\n",grib_expression_get_name(e),a->name);
return ret; return ret;
} }
len = strlen(cval) + 1; len = strlen(cval) + 1;
ret = grib_pack_string(a,cval,&len); ret = grib_pack_string(a,cval,&len);
} }
return ret; return ret;
} }
static void destroy(grib_context* context,grib_accessor* a) static void destroy(grib_context* context,grib_accessor* a)
@ -636,42 +636,42 @@ static void destroy(grib_context* context,grib_accessor* a)
} }
static int get_native_type(grib_accessor* a){ static int get_native_type(grib_accessor* a){
int type=GRIB_TYPE_LONG; int type=GRIB_TYPE_LONG;
/*printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n", /*printf("---------- %s flags=%ld GRIB_ACCESSOR_FLAG_STRING_TYPE=%d\n",
a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/ a->name,a->flags,GRIB_ACCESSOR_FLAG_STRING_TYPE);*/
if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE) if (a->flags & GRIB_ACCESSOR_FLAG_STRING_TYPE)
type=GRIB_TYPE_STRING; type=GRIB_TYPE_STRING;
return type; return type;
} }
static int unpack_long (grib_accessor* a, long* val, size_t *len) static int unpack_long (grib_accessor* a, long* val, size_t *len)
{ {
grib_accessor_codetable* self = (grib_accessor_codetable*)a; grib_accessor_codetable* self = (grib_accessor_codetable*)a;
unsigned long rlen = grib_value_count(a); unsigned long rlen = grib_value_count(a);
unsigned long i = 0; unsigned long i = 0;
long pos = a->offset*8; long pos = a->offset*8;
if(!self->table) self->table = load_table(self); if(!self->table) self->table = load_table(self);
if(*len < rlen) if(*len < rlen)
{ {
grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen); grib_context_log(a->parent->h->context, GRIB_LOG_ERROR, " wrong size (%ld) for %s it contains %d values ",*len, a->name , rlen);
*len = 0; *len = 0;
return GRIB_ARRAY_TOO_SMALL; return GRIB_ARRAY_TOO_SMALL;
} }
if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) { if (a->flags & GRIB_ACCESSOR_FLAG_TRANSIENT) {
*val=a->vvalue->lval; *val=a->vvalue->lval;
*len=1; *len=1;
return GRIB_SUCCESS; return GRIB_SUCCESS;
} }
for(i=0; i< rlen;i++){ for(i=0; i< rlen;i++){
val[i] = (long)grib_decode_unsigned_long(a->parent->h->buffer->data , &pos, self->nbytes*8); val[i] = (long)grib_decode_unsigned_long(a->parent->h->buffer->data , &pos, self->nbytes*8);
} }
*len = rlen; *len = rlen;
return GRIB_SUCCESS; return GRIB_SUCCESS;
} }

View File

@ -210,10 +210,10 @@ static grib_context default_grib_context = {
0, /* no_abort */ 0, /* no_abort */
0, /* io_buffer_size */ 0, /* io_buffer_size */
0, /* no_big_group_split */ 0, /* no_big_group_split */
0, /* no_spd */ 0, /* no_spd */
0, /* keep_matrix */ 0, /* keep_matrix */
0, /* grib_definition_files_path */ 0, /* grib_definition_files_path */
0, /* grib_samples_path */ 0, /* grib_samples_path */
0, /* grib_concept_path */ 0, /* grib_concept_path */
0, /* grib_reader */ 0, /* grib_reader */
0, /* user data */ 0, /* user data */

View File

@ -35,7 +35,7 @@ void grib_check(const char* call,const char* file,int line,int e,const char* ms
} }
} }
void grib_fail(const char* expr,const char* file,int line) { void grib_fail(const char* expr,const char* file,int line) {
fprintf(stderr,"%s at line %d: assertion failure Assert(%s)\n",file,line,expr); fprintf(stderr,"%s at line %d: assertion failure Assert(%s)\n",file,line,expr);
abort(); abort();
} }

View File

@ -1057,7 +1057,7 @@ int grib_read_any_from_file(grib_context* ctx,FILE* f,void* buffer,size_t* len)
int err; int err;
user_buffer u; user_buffer u;
reader r; reader r;
off_t offset; off_t offset;
u.user_buffer = buffer; u.user_buffer = buffer;
u.buffer_size = *len; u.buffer_size = *len;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
#!/bin/sh #! /bin/sh
# Copyright 2005-2012 ECMWF. # Copyright 2005-2012 ECMWF.
# #
# This software is licensed under the terms of the Apache Licence Version 2.0 # This software is licensed under the terms of the Apache Licence Version 2.0