~tieto/+junk/cfengine3

« back to all changes in this revision

Viewing changes to src/expand.c

  • Committer: Bazaar Package Importer
  • Author(s): Antonio Radici
  • Date: 2010-06-09 23:14:56 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20100609231456-fsfppubmvvx4hntk
Tags: 3.0.5+dfsg-1
* New upstream release
* debian/watch: modified again to catch the newest versions
* debian/patches:
  + all patches: refreshed
  + cf-monitor-pid: removed, it is upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
205
205
{ struct Rlist *rp;
206
206
  char *sp,rtype;
207
207
  void *rval;
208
 
  char var[CF_BUFSIZE],exp[CF_EXPANDSIZE],temp[CF_BUFSIZE];
 
208
  char v[CF_BUFSIZE],var[CF_EXPANDSIZE],exp[CF_EXPANDSIZE],temp[CF_BUFSIZE];
209
209
  
210
 
Debug("ScanScalar([%s])\n",string);
 
210
Debug("ScanScalar(\"%s\")\n",string);
211
211
 
212
212
if (string == NULL)
213
213
   {
216
216
 
217
217
for (sp = string; (*sp != '\0') ; sp++)
218
218
   {
 
219
   v[0] = '\0';
219
220
   var[0] = '\0';
220
221
   exp[0] = '\0';
221
 
   
 
222
 
222
223
   if (*sp == '$')
223
224
      {
224
 
      if (ExtractInnerCf3VarString(sp,var))
 
225
      if (ExtractInnerCf3VarString(sp,v))
225
226
         {
226
227
         char absscope[CF_MAXVARSIZE];
227
 
         
228
 
         if (strstr(var,"."))
 
228
 
 
229
         if (strstr(v,"."))
229
230
            {
230
231
            strncpy(temp,var,CF_BUFSIZE-1);  
231
232
            absscope[0] = '\0';
232
 
            sscanf(temp,"%[^.].%s",absscope,var);
 
233
            sscanf(temp,"%[^.].%s",absscope,v);
233
234
            }
234
235
         else
235
236
            {
236
237
            strncpy(absscope,scopeid,CF_MAXVARSIZE-1);  
237
238
            }
238
239
 
 
240
         ExpandPrivateScalar(absscope,v,var); 
 
241
 
239
242
         RegisterBundleDependence(absscope,pp);
240
 
         
 
243
 
241
244
         if (GetVariable(absscope,var,&rval,&rtype) != cf_notype)
242
245
            {
243
246
            if (rtype == CF_LIST)
285
288
int ExpandScalar(char *string,char buffer[CF_EXPANDSIZE])
286
289
 
287
290
{
288
 
Debug("\nExpandScalar(context=%s,id=%s)\n",CONTEXTID,string);
 
291
Debug("ExpandScalar(context=%s,id=%s)\n",CONTEXTID,string);
289
292
return ExpandPrivateScalar(CONTEXTID,string,buffer); 
290
293
}
291
294
 
444
447
      }
445
448
 
446
449
   memset(currentitem,0,CF_EXPANDSIZE);
447
 
   
 
450
 
448
451
   sscanf(sp,"%[^$]",currentitem);
449
452
   
450
453
   if (ExpandOverflow(buffer,currentitem))
455
458
   strcat(buffer,currentitem);
456
459
   sp += strlen(currentitem);
457
460
 
458
 
   Debug("  Add |%s| to str, waiting at |%s|\n",buffer,sp);
 
461
   Debug("  Aggregate result |%s|, scanning at \"%s\" (current delta %s)\n",buffer,sp,currentitem);
459
462
   
460
463
   if (*sp == '\0')
461
464
      {
467
470
      switch (*(sp+1))
468
471
         {
469
472
         case '(':
470
 
                   ExtractOuterCf3VarString(sp,var);
471
 
                   varstring = ')';
472
 
                   break;
 
473
             ExtractOuterCf3VarString(sp,var);
 
474
             varstring = ')';
 
475
             if (strlen(var) == 0)
 
476
                {
 
477
                strcat(buffer,"$");
 
478
                continue;
 
479
                }
 
480
             break;
 
481
 
473
482
         case '{':
474
 
                   ExtractOuterCf3VarString(sp,var);
475
 
                   varstring = '}';
476
 
                   break;
477
 
 
 
483
             ExtractOuterCf3VarString(sp,var);
 
484
             varstring = '}';
 
485
             if (strlen(var) == 0)
 
486
                {
 
487
                strcat(buffer,"$");
 
488
                continue;
 
489
                }
 
490
             break;
 
491
         
478
492
         default: 
479
 
                   strcat(buffer,"$");
480
 
                   continue;
 
493
             strcat(buffer,"$");
 
494
             continue;
481
495
         }
482
496
      }
483
497
 
486
500
   temp[0] = '\0';
487
501
   ExtractInnerCf3VarString(sp,temp);
488
502
   
489
 
   if (strstr(temp,"$"))
 
503
   if (IsCf3VarString(temp))
490
504
      {
491
505
      Debug("  Nested variables - %s\n",temp);
492
506
      ExpandPrivateScalar(scopeid,temp,currentitem);
493
507
      }
494
508
   else
495
509
      {
 
510
      Debug("  Delta - %s\n",temp);
496
511
      strncpy(currentitem,temp,CF_BUFSIZE-1);
497
512
      }
498
513
 
536
551
          return false;
537
552
 
538
553
      }
539
 
   
 
554
 
540
555
   sp += increment;
541
556
   currentitem[0] = '\0';
542
557
   }
583
598
      {
584
599
      NewScalar("this","handle",PromiseID(pp),cf_str);
585
600
      }
586
 
   
 
601
 
587
602
   pexp = ExpandDeRefPromise("this",pp);
588
 
     
 
603
   
589
604
   switch (agent)
590
605
      {
591
606
      case cf_common:
592
 
 
593
607
          ShowPromise(pexp,6);
594
608
          ReCheckAllConstraints(pexp);
595
609
          break;
957
971
 
958
972
if (cp == NULL)
959
973
   {
960
 
   CfOut(cf_error,"","Variable body for \"%s\" is incomplete",pp->promiser);
961
 
   PromiseRef(cf_error,pp);
 
974
   CfOut(cf_inform,"","Warning: Variable body for \"%s\" seems incomplete",pp->promiser);
 
975
   PromiseRef(cf_inform,pp);
962
976
   return;
963
977
   }
964
978
 
1052
1066
         last = rp;
1053
1067
         }
1054
1068
      }
1055
 
   
 
1069
 
1056
1070
   if (!AddVariableHash(scope,pp->promiser,rval,cp->type,Typename2Datatype(cp->lval),cp->audit->filename,cp->lineno))
1057
1071
      {
1058
1072
      CfOut(cf_verbose,"","Unable to converge %s.%s value (possibly empty or infinite regression)\n",scope,pp->promiser);