static int  create_accessor(grib_section* p, grib_action* act, grib_loader *h ){
  int ret = GRIB_SUCCESS;
  grib_action_template* a = ( grib_action_template*)act;
  grib_action* la = NULL;
  grib_action* next = NULL;
  grib_accessor* as = NULL;
  grib_section*         gs = NULL;

  char fname[1024]={0,};
  char *fpath=0;

  as = grib_accessor_factory(p, act,0,NULL);

  if(!as) return GRIB_INTERNAL_ERROR;
  if(a->arg){
    ret = grib_recompose_name(p->h,as,a->arg,fname,1);

	if ((fpath=grib_context_full_defs_path(p->h->context,fname))==NULL) {
      if (!a->nofail) {
        grib_context_log(p->h->context,GRIB_LOG_ERROR,
                         "Unable to find template %s from %s ",act->name,fname);
        return GRIB_FILE_NOT_FOUND;
      }
	  la = get_empty_template(p->h->context,&ret);
	  if (ret) return ret;
    } else 
      la = grib_parse_file(p->h->context, fpath);
  }
  as->flags |= GRIB_ACCESSOR_FLAG_HIDDEN;
  gs = as->sub_section;
  gs->branch = la; /* Will be used to prevent unecessary reparse */

  grib_push_accessor(as,p->block);

  if(la){
    next = la;

    while(next){
      ret = grib_create_accessor(gs, next,h);
      if(ret != GRIB_SUCCESS) {
      if(p->h->context->debug)
    {
      grib_context_log(p->h->context,GRIB_LOG_ERROR,
      "Error processing template %s: %s [%s] %04lx",
      fname,grib_get_error_message(ret),next->name,next->flags);
    }
      return ret;
    }
      next= next->next;
    }
  }
  return GRIB_SUCCESS;
}
grib_action* get_empty_template(grib_context* c,int *err) {
	char fname[]="empty_template.def";
	char* path=0;
	
	path=grib_context_full_defs_path(c,fname);
	if (path) {
		*err=GRIB_SUCCESS;
		return grib_parse_file(c, path);
	} else {
		*err=GRIB_INTERNAL_ERROR;
		grib_context_log(c,GRIB_LOG_ERROR,"get_empty_template: unable to get template %s",fname);
		return NULL;
	}
	
}
示例#3
0
int main(int argc, char *argv[])
{
  int i = 0;
  int fail = 0;

  grib_context* c = grib_context_get_default();
  grib_action* a=NULL;

  for(i = 1; i < argc; i++){
    /* printf("%s ... \n",argv[i]);fflush(stdout); */
    if(!(a=grib_parse_file(c,argv[i])))
    {
      fail++;
      printf("FAILED\n");
      exit(1);
    } else print_names(a);
  }

  return fail;
}
示例#4
0
int main(int argc, char *argv[])
{
    int i = 0;
    int fail = 0;

    grib_context* c = grib_context_get_default();
    grib_action* a=NULL;

    for(i = 1; i < argc; i++) {
        a=grib_parse_file(c,argv[i]);
        if (!a)
        {
            fail++;
            printf("FAILED\n");
            exit(1);
        }

        while (a) {
            if (*(a->name) != '_') printf("%s\n",a->name);
            a=a->next;
        }
    }
    return fail;
}
static grib_action* reparse(grib_action* a,grib_accessor* acc,int *doit)
{
  grib_action_template* self = (grib_action_template*)a;
  char *fpath=0;

  if(self->arg){
    char fname[1024];
    grib_recompose_name(acc->parent->h,NULL,self->arg,fname,1);

    if ((fpath=grib_context_full_defs_path(acc->parent->h->context,fname))==NULL) {
      if (!self->nofail) {
        grib_context_log(acc->parent->h->context,GRIB_LOG_ERROR,
                         "Unable to find template %s from %s ",a->name,fname);
        return NULL;
      } return a;
    }

    /* printf("REPARSE %s\n",fpath); */
    return grib_parse_file(acc->parent->h->context, fpath);
  }

  return NULL;

}