~tieto/+junk/cfengine3

« back to all changes in this revision

Viewing changes to src/vars.c

  • Committer: Bazaar Package Importer
  • Author(s): Antonio Radici
  • Date: 2010-04-30 08:11:20 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20100430081120-qjlb3etnasi7mr0a
Tags: 3.0.4+dfsg-1
 * debian/watch: modified to catch the newest versions
 * debian/control:
    + removed DMUA
    + bumped Standards-Version to 3.8.4 (no changed needed)
 * debian/patches:
    + all patches refreshed
    + rename-doesnt-fail: removed, it is incorporated upstream
    + added some more typos to patches/fix-error-typos
* Switch to dpkg-source 3.0 (quilt) format
    + debian/control: removed quilt from B-D
    + debian/rules: removed patch/unpatch and quilt include
    + debian/README.source removed
* debian/cfengin3.lintian-overrides:
    + overridden a spelling error (it is not)

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
void LoadSystemConstants()
38
38
 
39
39
{
40
 
 NewScalar("const","dollar","$",cf_str);
41
 
 NewScalar("const","n","\n",cf_str);
42
 
 NewScalar("const","r","\r",cf_str);
43
 
 NewScalar("const","endl","\n",cf_str);
 
40
NewScalar("const","dollar","$",cf_str);
 
41
NewScalar("const","n","\n",cf_str);
 
42
NewScalar("const","r","\r",cf_str);
 
43
NewScalar("const","t","\t",cf_str);
 
44
NewScalar("const","endl","\n",cf_str);
44
45
/* NewScalar("const","0","\0",cf_str);  - this cannot work */
45
46
}
46
47
 
71
72
void NewScalar(char *scope,char *lval,char *rval,enum cfdatatype dt)
72
73
 
73
74
{ char *sp1,*sp2;
74
 
 
 
75
  struct Rval rvald;
 
76
   
75
77
Debug("NewScalar(%s,%s,%s)\n",scope,lval,rval);
76
78
 
77
79
//sp1 = strdup(lval);
78
80
//sp2 = strdup((char *)rval);
79
81
 
 
82
if (GetVariable(scope,lval,&rvald.item,&rvald.rtype) != cf_notype)
 
83
   {
 
84
   DeleteScalar(scope,lval);
 
85
   }
 
86
 
80
87
sp1 = lval;
81
88
sp2 = rval;
82
89
 
92
99
 
93
100
Debug("IdempNewScalar(%s,%s,%s)\n",scope,lval,rval);
94
101
 
95
 
if (GetVariable(scope,lval,&rvald.item,&rvald.rtype) == cf_notype)
 
102
if (GetVariable(scope,lval,&rvald.item,&rvald.rtype) != cf_notype)
96
103
   {
97
104
   return;
98
105
   }
135
142
void NewList(char *scope,char *lval,void *rval,enum cfdatatype dt)
136
143
 
137
144
{ char *sp1;
 
145
  struct Rval rvald;
 
146
 
 
147
if (GetVariable(scope,lval,&rvald.item,&rvald.rtype) != cf_notype)
 
148
   {
 
149
   DeleteVariable(scope,lval);
 
150
   }
138
151
 
139
 
Debug("NewList(%s,%s,%s)\n",scope,lval,rval);
140
 
 
141
152
sp1 = strdup(lval);
142
 
 
143
153
AddVariableHash(scope,sp1,rval,CF_LIST,dt,NULL,0);
144
154
}
145
155
 
174
184
      }
175
185
   }
176
186
 
177
 
if (strstr(sval,"."))
 
187
if (IsQualifiedVariable(sval))
178
188
   {
179
189
   scopeid[0] = '\0';
180
190
   sscanf(sval,"%[^.].%s",scopeid,vlval);
400
410
 
401
411
for (rp = args; rp != NULL; rp = rp->next)
402
412
   {
 
413
   if (rp->type != CF_SCALAR)
 
414
      {
 
415
      return true;
 
416
      }
 
417
   
403
418
   if (IsCf3Scalar(rp->item))
404
419
      {
405
420
      return true;
477
492
  int bracks = 0, vars = 0;
478
493
 
479
494
Debug1("IsCf3VarString(%s) - syntax verify\n",str);
480
 
  
 
495
 
 
496
if (str == NULL)
 
497
   {
 
498
   return false;
 
499
   }
 
500
 
481
501
for (sp = str; *sp != '\0' ; sp++)       /* check for varitems */
482
502
   {
483
503
   switch (*sp)
506
526
             }
507
527
          break;
508
528
      }
 
529
 
 
530
   /* Some chars cannot be in variable ids, e.g.
 
531
      $(/bin/cat file) is legal in bash */
 
532
 
 
533
   if (bracks > 0)
 
534
      {
 
535
      switch (*sp)
 
536
         {
 
537
         case '/':
 
538
             return false;
 
539
         }
 
540
      }
509
541
   
510
542
   if (left == '(' && right == ')' && dollar && (bracks == 0))
511
543
      {
543
575
  int bracks = 0, vars = 0;
544
576
 
545
577
Debug1("IsCf3Scalar(%s) - syntax verify\n",str);
 
578
 
 
579
if (str == NULL)
 
580
   {
 
581
   return false;
 
582
   }
546
583
  
547
584
for (sp = str; *sp != '\0' ; sp++)       /* check for varitems */
548
585
   {
572
609
          break;
573
610
      }
574
611
   
 
612
   /* Some chars cannot be in variable ids, e.g.
 
613
      $(/bin/cat file) is legal in bash */
 
614
 
 
615
   if (bracks > 0)
 
616
      {
 
617
      switch (*sp)
 
618
         {
 
619
         case '/':
 
620
             return false;
 
621
         }
 
622
      }
 
623
 
575
624
   if (left == '(' && right == ')' && dollar && (bracks == 0))
576
625
      {
577
626
      vars++;
603
652
int DefinedVariable(char *name)
604
653
 
605
654
{ struct Rval rval;
 
655
 
 
656
if (name == NULL)
 
657
   {
 
658
   return false;
 
659
   }
606
660
 
607
661
if (GetVariable("this",name,&rval.item,&rval.rtype) == cf_notype)
608
662
   {
618
672
 
619
673
{ char varbuf[CF_BUFSIZE], rtype;
620
674
 
 
675
if (name == NULL)
 
676
   {
 
677
   return false;
 
678
   }
 
679
 
621
680
if (GetVariable(scope,name,(void *)varbuf,&rtype) != cf_notype)
622
681
   {
623
682
   return GetBoolean(varbuf);
756
815
 
757
816
return str;
758
817
}
 
818
 
 
819
/*********************************************************************/
 
820
 
 
821
int IsQualifiedVariable(char *var)
 
822
 
 
823
{ int isarraykey = false;
 
824
  char *sp;
 
825
 
 
826
for (sp = var; *sp != '\0'; sp++)
 
827
   {
 
828
   if (*sp == '[')
 
829
      {
 
830
      isarraykey = true;
 
831
      }
 
832
   
 
833
   if (isarraykey)
 
834
      {
 
835
      return false;
 
836
      }
 
837
   else
 
838
      {
 
839
      if (*sp == '.')
 
840
         {
 
841
         return true;
 
842
         }      
 
843
      }
 
844
   }
 
845
 
 
846
return false;
 
847
}
 
848