source: trunk/zoo-kernel/service_conf.y @ 58

Last change on this file since 58 was 58, checked in by djay, 13 years ago

Add binary files support for DataInputs?. Managing this binary format for the Python language, this should resolve the GRASS support in case of binary DataInputs?.

File size: 21.6 KB
Line 
1%{
2//======================================================
3/**
4 * Thx to Jean-Marie CODOL and Naitan GROLLEMUND
5 * copyright 2009 GeoLabs SARL
6 * Author : Gérald FENOY
7 *
8 */
9//======================================================
10
11#include <string>
12#include <stdio.h>
13#include <ctype.h>
14#include <service.h>
15  //#include <vector>
16
17static int tmp_count=1;
18static int defaultsc=0;
19static bool wait_maincontent=true;
20static bool wait_mainmetadata=false;
21static bool wait_metadata=false;
22static bool wait_inputs=false;
23static bool wait_defaults=false;
24static bool wait_supporteds=false;
25static bool wait_outputs=false;
26static bool wait_data=false;
27static int services_c=0;
28static service* my_service=NULL;
29static map* previous_content=NULL;
30static map* current_content=NULL;
31static elements* current_element=NULL;
32static map* scontent=NULL;
33static char* curr_key;
34static int debug=0;
35static int data=-1;
36static int previous_data=0;
37static int current_data=0;
38static char* myFinalObjectAsJSON="{";
39// namespace
40using namespace std;
41//======================================================
42
43// srerror
44void srerror(char *s);
45//======================================================
46
47// usage ()
48void usage(void) ;
49//======================================================
50
51// srdebug
52extern int srdebug;
53//======================================================
54
55extern char srtext[];
56
57// srlineno
58extern int srlineno;
59//======================================================
60
61// srin
62extern FILE* srin;
63//======================================================
64
65// srlex
66extern int srlex(void);
67extern int srlex_destroy(void);
68
69//vector<char*> lattribute;
70
71%}
72
73
74
75%union
76{char * s;char* chaine;char* key;char* val;}
77
78// jetons //
79%token <s> ID
80%token <s> CHAINE
81/* STARTXMLDECL et ENDXMLDECL qui sont <?xml et ?>*/
82%token STARTXMLDECL ENDXMLDECL
83//======================================================
84/* version="xxx" et encoding="xxx" */
85%token VERSIONDECL ENCODINGDECL SDDECL
86//======================================================
87/* < et > */
88%token INFCAR SUPCAR
89//======================================================
90/* / = a1  texte "texte" */
91%token SLASH Eq CHARDATA ATTVALUE PAIR SPAIR EPAIR ANID
92%type <chaine> PAIR
93%type <chaine> EPAIR
94%type <chaine> SPAIR
95//======================================================
96/* <!-- xxx -> <? xxx yyy ?> */
97%token PI PIERROR /** COMMENT **/
98//======================================================
99/* <!-- xxx -> <? xxx yyy ?> */
100%token ERREURGENERALE CDATA WHITESPACE NEWLINE
101%type <s> STag
102%type <s> ETag
103%type <s> ANID
104//======================================================
105// %start
106//======================================================
107
108%%
109// document <//===
110//======================================================
111// regle 1
112// on est a la racine du fichier xml
113//======================================================
114document
115 : miscetoile element miscetoile {}
116 | contentetoile processid contentetoile document {}
117 ;
118
119miscetoile
120 : miscetoile PIERROR {  srerror("processing instruction begining with <?xml ?> impossible\n");}
121 | miscetoile PI {}
122 | {}
123 ;
124// element
125//======================================================
126// regle 39
127// OUVRANTE CONTENU FERMANTE obligatoirement
128// ou neutre
129// on ne peut pas avoir Epsilon
130// un fichier xml ne peut pas etre vide ou seulement avec un prolog
131//======================================================
132element
133 : STag contentetoile ETag     
134{
135}
136
137// pour neutre
138// on a rien a faire, meme pas renvoyer l identificateur de balise
139// vu qu'il n y a pas de comparaison d'identificateurs avec un balise jumelle .
140 | EmptyElemTag          {}
141 ;
142
143//======================================================
144// STag
145//======================================================
146// regle 40
147// BALISE OUVRANTE
148// on est obligé de faire appel a infcar et supcar
149// pour acceder aux start conditions DANSBALISE et INITIAL
150//======================================================
151STag
152: INFCAR ID Attributeetoile SUPCAR
153{
154  if(my_service->content==NULL){
155#ifdef DEBUG_SERVICE_CONF
156    fprintf(stderr,"NO CONTENT\n");
157#endif
158    addMapToMap(&my_service->content,current_content);
159    freeMap(&current_content);
160    free(current_content);
161    current_content=NULL;
162    my_service->metadata=NULL;
163    wait_maincontent=false;
164  }
165  if(strncasecmp($2,"DataInputs",10)==0){
166    if(wait_mainmetadata==true){
167      addMapToMap(&my_service->metadata,current_content);
168      freeMap(&current_content);
169      free(current_content);
170      current_content=NULL;
171    }
172    if(current_element==NULL){
173#ifdef DEBUG_SERVICE_CONF
174      fprintf(stderr,"(DATAINPUTS - 184) FREE current_element\n");
175#endif
176      freeElements(&current_element);
177      free(current_element);
178      current_element=NULL;
179#ifdef DEBUG_SERVICE_CONF
180      fprintf(stderr,"(DATAINPUTS - 186) ALLOCATE current_element\n");
181#endif
182      current_element=NULL;
183      current_element=(elements*)malloc(ELEMENTS_SIZE);
184      current_element->name=NULL;
185      current_element->content=NULL;
186      current_element->metadata=NULL;
187      current_element->format=NULL;
188      current_element->defaults=NULL;
189      current_element->supported=NULL;
190      current_element->next=NULL;
191    }
192    wait_inputs=true;
193    current_data=1;
194    previous_data=1;
195  }
196  else
197    if(strncasecmp($2,"DataOutputs",11)==0){
198      if(wait_inputs==true){
199#ifdef DEBUG_SERVICE_CONF
200        fprintf(stderr,"(DATAOUTPUTS) DUP INPUTS current_element\n");
201        fprintf(stderr,"CURRENT_ELEMENT\n");
202        dumpElements(current_element);
203        fprintf(stderr,"SERVICE INPUTS\n");
204        dumpElements(my_service->inputs);
205        dumpService(my_service);
206#endif
207        if(my_service->inputs==NULL){
208          my_service->inputs=dupElements(current_element);
209          my_service->inputs->next=NULL;
210        }
211        else if(current_element!=NULL && current_element->name!=NULL){
212          addToElements(&my_service->inputs,current_element);
213        }
214#ifdef DEBUG_SERVICE_CONF
215        fprintf(stderr,"CURRENT_ELEMENT\n");
216        dumpElements(current_element);
217        fprintf(stderr,"SERVICE INPUTS\n");
218        dumpElements(my_service->inputs);
219        fprintf(stderr,"(DATAOUTPUTS) FREE current_element\n");
220#endif
221        freeElements(&current_element);
222        free(current_element);
223        current_element=NULL;
224        wait_inputs=false;
225      }
226      if(current_element==NULL){
227#ifdef DEBUG_SERVICE_CONF
228        fprintf(stderr,"(DATAOUTPUTS - 206) ALLOCATE current_element (%s)\n",$2);
229#endif
230        current_element=(elements*)malloc(ELEMENTS_SIZE);
231        current_element->name=NULL;
232        current_element->content=NULL;
233        current_element->metadata=NULL;
234        current_element->format=NULL;
235        current_element->defaults=NULL;
236        current_element->supported=NULL;
237        current_element->next=NULL;
238      }
239      wait_outputs=true;
240      current_data=2;
241      previous_data=1;
242    }
243    else
244      if(strncasecmp($2,"MetaData",8)==0){
245        current_data=3;
246        if(current_element!=NULL){
247          wait_metadata=true;
248#ifdef DEBUG_SERVICE_CONF
249          fprintf(stderr,"add current_content to current_element->content\n");
250          fprintf(stderr,"LINE 247");
251#endif
252          addMapToMap(&current_element->content,current_content);
253          freeMap(&current_content);
254          free(current_content);
255        }
256        else{
257          wait_mainmetadata=true;
258        }
259        current_content=NULL;
260      }
261      else
262        if(strncasecmp($2,"ComplexData",11)==0 || strncasecmp($2,"LiteralData",10)==0
263           || strncasecmp($2,"ComplexOutput",13)==0 || strncasecmp($2,"LiteralOutput",12)==0){
264          current_data=4;
265          if(wait_metadata==true){
266            if(current_content!=NULL){
267              addMapToMap(&current_element->metadata,current_content);
268              current_element->next=NULL;
269              current_element->format=strdup($2);
270              current_element->defaults=NULL;
271              current_element->supported=NULL;
272              freeMap(&current_content);
273              free(current_content);
274            }
275          }else{
276            // No MainMetaData
277            addMapToMap(&current_element->content,current_content);
278            freeMap(&current_content);
279            free(current_content);
280            current_element->metadata=NULL;
281            current_element->next=NULL;
282            current_element->format=strdup($2);
283            current_element->defaults=NULL;
284            current_element->supported=NULL;
285          }
286          current_content=NULL;
287          wait_metadata=false;
288        }
289        else
290          if(strncasecmp($2,"Default",7)==0){
291            wait_defaults=true;
292            current_data=5;
293          }
294          else
295            if(strncasecmp($2,"Supported",9)==0){
296              wait_supporteds=true;
297              if(wait_defaults==true){
298                defaultsc++;
299              }
300              current_data=5;
301            }
302#ifdef DEBUG_SERVICE_CONF
303  printf("* Identifiant : %s\n",$2);
304#endif
305}
306 ;
307
308//======================================================
309// Attributeetoile
310//======================================================
311// regle 41
312// une liste qui peut etre vide d'attributs
313// utiliser la récursivité a gauche
314//======================================================
315Attributeetoile
316 : Attributeetoile attribute  {}
317 |                                {/* Epsilon */}
318 ;
319
320//======================================================
321// attribute
322//======================================================
323// regle 41
324// un attribut est compose d'un identifiant
325// d'un "="
326// et d'une définition de chaine de caractere
327// ( "xxx" ou 'xxx' )
328//======================================================
329attribute
330 : ID Eq ATTVALUE               
331{
332#ifdef DEBUG_SERVICE_CONF
333  printf ("attribute : %s\n",$1) ;
334#endif
335}
336 ;
337
338//======================================================
339// EmptyElemTag
340//======================================================
341// regle 44
342// ICI ON DEFINIT NEUTRE
343// on ne renvoie pas de char*
344// parce qu'il n'y a pas de comparaisons a faire
345// avec un identifiant d'une balise jumelle
346//======================================================
347EmptyElemTag
348 : INFCAR ID Attributeetoile SLASH SUPCAR       {/*lattribute.clear();/* voir Stag */}
349 ;
350
351//======================================================
352// ETag
353//======================================================
354// regle 42
355// BALISE FERMANTE
356// les separateurs après ID sont filtrés
357//======================================================
358ETag
359 : INFCAR SLASH ID SUPCAR
360{
361  if(strcmp($3,"DataInputs")==0){
362    current_data=1;
363  }
364  if(strcmp($3,"DataOutputs")==0){
365    current_data=2;
366  }
367  if(strcmp($3,"MetaData")==0){
368    current_data=previous_data;
369  }
370  if(strcmp($3,"ComplexData")==0 || strcmp($3,"LiteralData")==0
371     || strcmp($3,"ComplexOutput")==0 || strcmp($3,"LiteralOutput")==0){
372    current_content=NULL;
373  }
374  if(strcmp($3,"Default")==0){
375    current_data=previous_data;
376    if(current_element->defaults==NULL){
377      current_element->defaults=(iotype*)malloc(IOTYPE_SIZE);
378      current_element->defaults->content=NULL;
379    }
380    addMapToMap(&current_element->defaults->content,current_content);
381    freeMap(&current_content);
382    free(current_content);
383    current_element->defaults->next=NULL;
384    wait_defaults=false;
385    current_content=NULL;
386    current_element->supported=NULL;
387    current_element->next=NULL;
388  }
389  if(strcmp($3,"Supported")==0){
390    current_data=previous_data;
391    if(current_element->supported==NULL){
392      if(current_content!=NULL){
393        current_element->supported=(iotype*)malloc(IOTYPE_SIZE);
394        current_element->supported->content=NULL;
395        addMapToMap(&current_element->supported->content,current_content);
396        freeMap(&current_content);
397        free(current_content);
398        current_element->supported->next=NULL;
399        current_content=NULL;
400      }else{
401        current_element->supported=NULL;
402        current_element->next=NULL;
403      }
404    }
405    else{
406#ifdef DEBUG_SERVICE_CONF
407      fprintf(stderr,"SECOND SUPPORTED FORMAT !!!!\n");
408#endif
409      addMapToIoType(&current_element->supported,current_content);
410      freeMap(&current_content);
411      free(current_content);
412      current_content=NULL;
413#ifdef DEBUG_SERVICE_CONF
414      dumpElements(current_element);
415      fprintf(stderr,"SECOND SUPPORTED FORMAT !!!!\n");
416#endif
417    }
418    current_content=NULL;
419  }
420}
421 ;
422
423//======================================================
424// contentetoile
425//======================================================
426// regle 43
427// ENTRE 2 BALISES
428// entre 2 balises, on peut avoir :
429// --- OUVRANTE CONTENU FERMANTE (recursivement !)
430// --- DU TEXTE quelconque
431// --- COMMENTS
432// --- DES PROCESSES INSTRUCTIONS
433// --- /!\ il peut y avoir une processing instruction invalide ! <?xml
434// --- EPSILON
435// ### et/ou tout ca a la suite en nombre indeterminé
436// ### donc c'est un operateur etoile (*)
437//======================================================
438contentetoile
439: contentetoile element           {}
440 | contentetoile PIERROR                  {srerror("processing instruction <?xml ?> impossible\n");}
441 | contentetoile PI                       {}
442///// on filtre les commentaires | contentetoile comment              {}
443 | contentetoile NEWLINE {/*printf("NEWLINE FOUND !!");*/}
444 | contentetoile pair {}
445 | contentetoile processid {}
446 | contentetoile texteinterbalise         {}
447 | contentetoile CDATA {} 
448 | {/* Epsilon */}
449 ;
450
451//======================================================
452// texteinterbalise
453//======================================================
454// regle 14
455// DU TEXTE quelconque
456// c'est du CHARDATA
457// il y a eut un probleme avec ID,
458// on a mis des starts conditions,
459// maintenant on croise les ID dans les dbalises
460// et des CHARDATA hors des balises
461//======================================================
462texteinterbalise
463 : CHARDATA             {}
464 ;
465//======================================================
466
467pair: PAIR {  if(debug) fprintf(stderr,"PAIR FOUND !!\n");if(curr_key!=NULL){free(curr_key);curr_key=NULL;} }
468| EPAIR {
469#ifdef DEBUG_SERVICE_CONF
470    fprintf(stderr,"EPAIR FOUND !! \n");
471    fprintf(stderr,"[%s=>%s]\n",curr_key,$1);
472    fprintf(stderr,"[ZOO: service_conf.y line 482 free(%s)]\n",curr_key);
473    dumpMap(current_content);
474    fflush(stderr);
475#endif
476  if(current_content==NULL){
477#ifdef DEBUG_SERVICE_CONF
478    fprintf(stderr,"[ZOO: service_conf.y line 482 free(%s)]\n",curr_key);
479#endif
480    current_content=createMap(curr_key,$1);
481#ifdef DEBUG_SERVICE_CONF
482    fprintf(stderr,"[ZOO: service_conf.y line 482 free(%s)]\n",curr_key);
483#endif
484    //current_content->next=NULL;
485  }
486  else{
487#ifdef DEBUG_SERVICE_CONF
488    dumpMap(current_content);
489    fprintf(stderr,"addToMap(current_content,%s,%s) !! \n",curr_key,$1);
490#endif
491    addToMap(current_content,curr_key,$1);
492#ifdef DEBUG_SERVICE_CONF
493    fprintf(stderr,"addToMap(current_content,%s,%s) end !! \n",curr_key,$1);
494#endif   
495  }
496#ifdef DEBUG_SERVICE_CONF
497  fprintf(stderr,"EPAIR FOUND !! \n");
498  fprintf(stderr,"[%s=>%s]\n",curr_key,$1);
499  fprintf(stderr,"[ZOO: service_conf.y line 505 free(%s)]\n",curr_key);
500  fflush(stderr);
501#endif
502  if(curr_key!=NULL){
503    free(curr_key);
504    curr_key=NULL;
505  }
506  }
507| SPAIR  { curr_key=strdup($1);/*free($1);*/if(debug) fprintf(stderr,"SPAIR FOUND !!\n"); }
508 ;
509
510
511processid
512: ANID  {
513  if(data==-1){
514    data=1;
515    char *cen=strdup($1);
516    my_service->name=(char*)malloc((strlen(cen)-1)*sizeof(char*));
517    cen[strlen(cen)-1]=0;
518    cen+=1;
519    sprintf(my_service->name,"%s",cen);
520    cen-=1;
521    free(cen);
522    my_service->content=NULL;
523    my_service->metadata=NULL;
524    my_service->inputs=NULL;
525    my_service->outputs=NULL;
526  } else {
527    if(current_data==1){
528      if(my_service->content!=NULL && current_element->name!=NULL){
529        if(my_service->inputs==NULL){
530          my_service->inputs=dupElements(current_element);
531          my_service->inputs->next=NULL;
532          tmp_count++;
533        }
534        else{
535          addToElements(&my_service->inputs,current_element);
536        }
537#ifdef DEBUG_SERVICE_CONF
538        fprintf(stderr,"(%s %d)FREE current_element (after adding to allread existing inputs)",__FILE__,__LINE__);
539        dumpElements(current_element);
540        fprintf(stderr,"(%s %d)FREE current_element (after adding to allread existing inputs)",__FILE__,__LINE__);
541        dumpElements(my_service->inputs);
542#endif
543        freeElements(&current_element);
544        free(current_element);
545        current_element=NULL;
546#ifdef DEBUG_SERVICE_CONF
547        fprintf(stderr,"(DATAINPUTS - 489) ALLOCATE current_element\n");
548#endif
549        current_element=(elements*)malloc(ELEMENTS_SIZE);
550        current_element->name=NULL;
551        current_element->content=NULL;
552        current_element->metadata=NULL;
553        current_element->format=NULL;
554        current_element->defaults=NULL;
555        current_element->supported=NULL;
556        current_element->next=NULL;
557      }
558      if(current_element->name==NULL){
559#ifdef DEBUG_SERVICE_CONF
560        fprintf(stderr,"NAME IN %s (current - %s)\n",
561                $1,current_element->name);
562#endif
563        wait_inputs=true;
564#ifdef DEBUG_SERVICE_CONF
565        fprintf(stderr,"(DATAINPUTS - 501) SET NAME OF current_element\n");
566#endif
567        char *cen=strdup($1);
568        current_element->name=(char*)malloc((strlen(cen)-1)*sizeof(char*));
569        cen[strlen(cen)-1]=0;
570        cen+=1;
571        sprintf(current_element->name,"%s",cen);
572        cen-=1;
573        free(cen);
574#ifdef DEBUG_SERVICE_CONF
575        fprintf(stderr,"NAME IN %s (current - %s)\n",$1,current_element->name);
576#endif
577        current_element->content=NULL;
578        current_element->metadata=NULL;
579        current_element->format=NULL;
580        current_element->defaults=NULL;
581        current_element->supported=NULL;
582        current_element->next=NULL;
583#ifdef DEBUG_SERVICE_CONF
584        fprintf(stderr,"NAME IN %s (current - %s)\n",$1,current_element->name);
585#endif
586      }
587    }
588    else
589      if(current_data==2){
590        if(wait_inputs==true){
591          if(current_element!=NULL && current_element->name!=NULL){
592            if(my_service->inputs==NULL){
593              my_service->inputs=dupElements(current_element);
594              my_service->inputs->next=NULL;
595            }
596            else{
597#ifdef DEBUG_SERVICE_CONF
598              fprintf(stderr,"LAST NAME IN %s (current - %s)\n",$1,current_element->name);
599#endif
600              addToElements(&my_service->inputs,current_element);
601            }
602#ifdef DEBUG_SERVICE_CONF
603            dumpElements(current_element);
604            fprintf(stderr,"(DATAOUTPUTS) FREE current_element %s %i\n",__FILE__,__LINE__);
605#endif
606            freeElements(&current_element);
607            free(current_element);
608            current_element=NULL;
609#ifdef DEBUG_SERVICE_CONF
610            fprintf(stderr,"(DATAOUTPUTS) ALLOCATE current_element %s %i\n",__FILE__,__LINE__);
611#endif
612            current_element=(elements*)malloc(ELEMENTS_SIZE);
613            current_element->name=NULL;
614            current_element->content=NULL;
615            current_element->metadata=NULL;
616            current_element->format=NULL;
617            current_element->defaults=NULL;
618            current_element->supported=NULL;
619            current_element->next=NULL;
620          }
621          if(current_element->name==NULL){
622#ifdef DEBUG_SERVICE_CONF
623            fprintf(stderr,"NAME OUT %s\n",$1);
624            fprintf(stderr,"(DATAOUTPUTS - 545) SET NAME OF current_element\n");
625#endif
626            char *cen=strdup($1);
627            current_element->name=(char*)malloc((strlen(cen)-1)*sizeof(char*));
628            cen[strlen(cen)-1]=0;
629            cen+=1;
630            sprintf(current_element->name,"%s",cen);
631            cen-=1;
632            free(cen);
633            current_element->content=NULL;
634            current_element->metadata=NULL;
635            current_element->format=NULL;
636            current_element->defaults=NULL;
637            current_element->supported=NULL;
638            current_element->next=NULL;
639          }
640          wait_inputs=false;
641          current_content=NULL;
642        }
643        else
644          if(current_element->name==NULL){
645#ifdef DEBUG_SERVICE_CONF
646            fprintf(stderr,"NAME OUT %s\n",$1);
647            fprintf(stderr,"(DATAOUTPUTS - 545) SET NAME OF current_element\n");
648#endif
649            char *cen=strdup($1);
650            current_element->name=(char*)malloc((strlen(cen)-1)*sizeof(char*));
651            cen[strlen(cen)-1]=0;
652#ifdef DEBUG
653            fprintf(stderr,"tmp %s\n",cen);
654#endif
655            cen+=1;
656            sprintf(current_element->name,"%s",cen);
657            cen-=1;
658            free(cen);
659            current_element->content=NULL;
660            current_element->metadata=NULL;
661            current_element->format=NULL;
662            current_element->defaults=NULL;
663            current_element->supported=NULL;
664            current_element->next=NULL;
665          }
666        wait_outputs=true;
667      }
668  }
669 }
670 ;
671
672%%
673
674// srerror
675//======================================================
676/* fonction qui affiche l erreur si il y en a une */
677//======================================================
678void srerror(char *s)
679{
680  if(debug)
681    fprintf(stderr,"\nligne %d : %s\n",srlineno,s);
682}
683
684/**
685 * getServiceFromFile :
686 * set service given as second parameter with informations extracted from the
687 * definition file.
688 */
689int getServiceFromFile(char* file,service** service){
690
691  freeMap(&previous_content);
692  previous_content=NULL;
693  freeMap(&current_content);
694  current_content=NULL;
695  freeMap(&scontent);
696#ifdef DEBUG_SERVICE_CONF
697  fprintf(stderr,"(STARTING)FREE current_element\n");
698#endif
699  freeElements(&current_element);
700  current_element=NULL;
701#ifdef DEBUG_SERVICE_CONF
702  fprintf(stderr,"(STARTING)FREE my_service\n");
703#endif
704  //freeService(&my_service);
705  //free(my_service);
706#ifdef DEBUG_SERVICE_CONF
707  fprintf(stderr,"(STARTING)FREE my_service done\n");
708#endif
709  my_service=NULL;
710  scontent=NULL;
711
712  wait_maincontent=true;
713  wait_mainmetadata=false;
714  wait_metadata=false;
715  wait_inputs=false;
716  wait_defaults=false;
717  wait_supporteds=false;
718  wait_outputs=false;
719  wait_data=false;
720  data=-1;
721  previous_data=1;
722  current_data=0;
723 
724  my_service=*service;
725
726  srin = fopen(file,"r");
727  if (srin==NULL){
728    fprintf(stderr,"error : le fichier specifie n'existe pas ou n'est pas accessible en lecture\n") ;
729    return -1;
730  }
731
732  int resultatYYParse = srparse() ;
733 
734  if(wait_outputs==true && current_element!=NULL && current_element->name!=NULL){
735    if(my_service->outputs==NULL){     
736#ifdef DEBUG_SERVICE_CONF
737      fprintf(stderr,"(DATAOUTPUTS - 623) DUP current_element\n");
738#endif
739      my_service->outputs=dupElements(current_element);
740      my_service->outputs->next=NULL;
741    }
742    else{
743#ifdef DEBUG_SERVICE_CONF
744      fprintf(stderr,"(DATAOUTPUTS - 628) COPY current_element\n");
745#endif
746      addToElements(&my_service->outputs,current_element);
747    }
748#ifdef DEBUG_SERVICE_CONF
749    fprintf(stderr,"(DATAOUTPUTS - 631) FREE current_element\n");
750#endif
751    freeElements(&current_element);
752    free(current_element);
753    current_element=NULL;
754#ifdef DEBUG_SERVICE_CONF
755    fprintf(stderr,"(DATAOUTPUTS - 631) FREE current_element\n");
756#endif
757  }
758  if(current_element!=NULL){
759    freeElements(&current_element);
760    free(current_element);
761    current_element=NULL;
762  }
763  if(current_content!=NULL){
764    freeMap(&current_content);
765    free(current_content);
766    current_content=NULL;
767  }
768  fclose(srin);
769#ifdef DEBUG_SERVICE_CONF
770  dumpService(my_service);
771#endif
772  *service=my_service;
773
774  srlex_destroy();
775  return resultatYYParse;
776}
Note: See TracBrowser for help on using the repository browser.

Search

ZOO Sponsors

http://www.zoo-project.org/trac/chrome/site/img/geolabs-logo.pnghttp://www.zoo-project.org/trac/chrome/site/img/neogeo-logo.png http://www.zoo-project.org/trac/chrome/site/img/apptech-logo.png http://www.zoo-project.org/trac/chrome/site/img/3liz-logo.png http://www.zoo-project.org/trac/chrome/site/img/gateway-logo.png

Become a sponsor !

Knowledge partners

http://www.zoo-project.org/trac/chrome/site/img/ocu-logo.png http://www.zoo-project.org/trac/chrome/site/img/gucas-logo.png http://www.zoo-project.org/trac/chrome/site/img/polimi-logo.png http://www.zoo-project.org/trac/chrome/site/img/fem-logo.png http://www.zoo-project.org/trac/chrome/site/img/supsi-logo.png http://www.zoo-project.org/trac/chrome/site/img/cumtb-logo.png

Become a knowledge partner

Related links

http://zoo-project.org/img/ogclogo.png http://zoo-project.org/img/osgeologo.png