[csw-devel] SF.net SVN: gar:[22052] csw/mgar/pkg/cfengine3/trunk

guengel at users.sourceforge.net guengel at users.sourceforge.net
Sun Sep 29 14:57:53 CEST 2013


Revision: 22052
          http://gar.svn.sourceforge.net/gar/?rev=22052&view=rev
Author:   guengel
Date:     2013-09-29 12:57:51 +0000 (Sun, 29 Sep 2013)
Log Message:
-----------
cfengine3/trunk: Added patch for Solaris 11 (enum name clash in system header).

Modified Paths:
--------------
    csw/mgar/pkg/cfengine3/trunk/Makefile
    csw/mgar/pkg/cfengine3/trunk/files/changelog.CSW

Added Paths:
-----------
    csw/mgar/pkg/cfengine3/trunk/files/0003-Solaris-11-DATA_TYPE_-name-clash-patch.patch

Modified: csw/mgar/pkg/cfengine3/trunk/Makefile
===================================================================
--- csw/mgar/pkg/cfengine3/trunk/Makefile	2013-09-28 16:27:20 UTC (rev 22051)
+++ csw/mgar/pkg/cfengine3/trunk/Makefile	2013-09-29 12:57:51 UTC (rev 22052)
@@ -40,6 +40,9 @@
 
 PATCHFILES += 0000-evalfunction-unittest-needs-z-interpose-when-linking.patch
 PATCHFILES += 0000-Disable-acceptance-test.patch
+# Patch has been generated by using
+#  find work/solaris11-sparc/build-isa-sparcv8plus/cfengine-3.5.2/ -type f \( -name \*.c -o -name \*.h -o -name \*.y \) -exec gsed -i.bak 's/DATA_TYPE_/CF_DATA_TYPE_/g' \{\} \;
+PATCHFILES += 0003-Solaris-11-DATA_TYPE_-name-clash-patch.patch
 
 #
 # CUSTOM VARIABLES

Added: csw/mgar/pkg/cfengine3/trunk/files/0003-Solaris-11-DATA_TYPE_-name-clash-patch.patch
===================================================================
--- csw/mgar/pkg/cfengine3/trunk/files/0003-Solaris-11-DATA_TYPE_-name-clash-patch.patch	                        (rev 0)
+++ csw/mgar/pkg/cfengine3/trunk/files/0003-Solaris-11-DATA_TYPE_-name-clash-patch.patch	2013-09-29 12:57:51 UTC (rev 22052)
@@ -0,0 +1,3747 @@
+From 2b6e0b6cd2e733b488c9d2bf5db8e0c7c4299e3b Mon Sep 17 00:00:00 2001
+From: Rafael Ostertag <raos at opencsw.org>
+Date: Sun, 29 Sep 2013 14:50:15 +0200
+Subject: [PATCH] Solaris 11 DATA_TYPE_* name clash patch.
+
+---
+ cf-agent/cf-agent.c               |  12 +-
+ cf-agent/files_editline.c         |   2 +-
+ cf-agent/files_editxml.c          |   2 +-
+ cf-agent/vercmp.c                 |   4 +-
+ cf-agent/verify_environments.c    |   2 +-
+ cf-agent/verify_exec.c            |   2 +-
+ cf-agent/verify_files.c           |   4 +-
+ cf-agent/verify_files_utils.c     |   2 +-
+ cf-agent/verify_methods.c         |   2 +-
+ cf-agent/verify_packages.c        |  24 +-
+ cf-agent/verify_processes.c       |   2 +-
+ cf-agent/verify_services.c        |  10 +-
+ cf-execd/cf-execd.c               |   2 +-
+ cf-gendoc/export_xml.c            |  40 +-
+ cf-gendoc/manual.c                |   8 +-
+ cf-monitord/verify_measurements.c |  10 +-
+ libpromises/attributes.c          |   4 +-
+ libpromises/bootstrap.c           |   6 +-
+ libpromises/cf3.defs.h            |  32 +-
+ libpromises/cf3parse.c            |  14 +-
+ libpromises/cf3parse.y            |  14 +-
+ libpromises/conversion.c          |  40 +-
+ libpromises/env_context.c         |  12 +-
+ libpromises/evalfunction.c        | 984 +++++++++++++++++++-------------------
+ libpromises/expand.c              |  46 +-
+ libpromises/generic_agent.c       |   4 +-
+ libpromises/iteration.c           |   2 +-
+ libpromises/policy.c              |  40 +-
+ libpromises/promises.c            |   2 +-
+ libpromises/rlist.c               |  32 +-
+ libpromises/scope.c               |  34 +-
+ libpromises/syntax.c              |  74 +--
+ libpromises/syntax.h              |  32 +-
+ libpromises/sysinfo.c             | 100 ++--
+ libpromises/unix.c                |  28 +-
+ libpromises/vars.c                |  10 +-
+ libpromises/verify_reports.c      |   2 +-
+ libpromises/verify_vars.c         |   6 +-
+ tests/unit/assoc_test.c           |   2 +-
+ tests/unit/exec-config-test.c     |   2 +-
+ tests/unit/expand_test.c          |  30 +-
+ tests/unit/scope_test.c           |   6 +-
+ tests/unit/set_domainname_test.c  |   2 +-
+ 43 files changed, 844 insertions(+), 844 deletions(-)
+
+diff --git a/cf-agent/cf-agent.c b/cf-agent/cf-agent.c
+index be3cf9a..c63f233 100644
+--- a/cf-agent/cf-agent.c
++++ b/cf-agent/cf-agent.c
+@@ -1311,9 +1311,9 @@ static void DefaultVarPromise(EvalContext *ctx, const Promise *pp)
+ 
+     switch (dt)
+        {
+-       case DATA_TYPE_STRING:
+-       case DATA_TYPE_INT:
+-       case DATA_TYPE_REAL:
++       case CF_DATA_TYPE_STRING:
++       case CF_DATA_TYPE_INT:
++       case CF_DATA_TYPE_REAL:
+ 
+            if (regex && !FullTextMatch(regex,rval.item))
+               {
+@@ -1327,9 +1327,9 @@ static void DefaultVarPromise(EvalContext *ctx, const Promise *pp)
+ 
+            break;
+ 
+-       case DATA_TYPE_STRING_LIST:
+-       case DATA_TYPE_INT_LIST:
+-       case DATA_TYPE_REAL_LIST:
++       case CF_DATA_TYPE_STRING_LIST:
++       case CF_DATA_TYPE_INT_LIST:
++       case CF_DATA_TYPE_REAL_LIST:
+ 
+            if (regex)
+               {
+diff --git a/cf-agent/files_editline.c b/cf-agent/files_editline.c
+index 24ad1ae..7786981 100644
+--- a/cf-agent/files_editline.c
++++ b/cf-agent/files_editline.c
+@@ -113,7 +113,7 @@ int ScheduleEditLineOperations(EvalContext *ctx, Bundle *bp, Attributes a, const
+         return false;
+     }
+ 
+-    ScopeNewSpecial(ctx, "edit", "filename", edcontext->filename, DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "edit", "filename", edcontext->filename, CF_DATA_TYPE_STRING);
+ 
+     for (pass = 1; pass < CF_DONEPASSES; pass++)
+     {
+diff --git a/cf-agent/files_editxml.c b/cf-agent/files_editxml.c
+index ebe953e..f861ccb 100644
+--- a/cf-agent/files_editxml.c
++++ b/cf-agent/files_editxml.c
+@@ -160,7 +160,7 @@ int ScheduleEditXmlOperations(EvalContext *ctx, Bundle *bp, Attributes a, const
+         return false;
+     }
+ 
+-    ScopeNewSpecial(ctx, "edit", "filename", edcontext->filename, DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "edit", "filename", edcontext->filename, CF_DATA_TYPE_STRING);
+ 
+     for (pass = 1; pass < CF_DONEPASSES; pass++)
+     {
+diff --git a/cf-agent/vercmp.c b/cf-agent/vercmp.c
+index 8515826..2be84da 100644
+--- a/cf-agent/vercmp.c
++++ b/cf-agent/vercmp.c
+@@ -64,8 +64,8 @@ static VersionCmpResult RunCmpCommand(EvalContext *ctx, const char *command, con
+     char expanded_command[CF_EXPANDSIZE];
+ 
+     {
+-        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "v1" }, (Rval) { v1, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "v2" }, (Rval) { v2, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "v1" }, (Rval) { v1, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "v2" }, (Rval) { v2, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+         ExpandScalar(ctx, "cf_pack_context", command, expanded_command);
+ 
+         ScopeClear("cf_pack_context");
+diff --git a/cf-agent/verify_environments.c b/cf-agent/verify_environments.c
+index 6a87431..0ff582e 100644
+--- a/cf-agent/verify_environments.c
++++ b/cf-agent/verify_environments.c
+@@ -134,7 +134,7 @@ void VerifyEnvironmentsPromise(EvalContext *ctx, Promise *pp)
+         }
+ 
+         PromiseBanner(pp);
+-        ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, CF_DATA_TYPE_STRING);
+ 
+         pexp = ExpandDeRefPromise(ctx, "this", pp);
+         VerifyEnvironments(ctx, a, pp);
+diff --git a/cf-agent/verify_exec.c b/cf-agent/verify_exec.c
+index 1dd7a86..51051af 100644
+--- a/cf-agent/verify_exec.c
++++ b/cf-agent/verify_exec.c
+@@ -64,7 +64,7 @@ void VerifyExecPromise(EvalContext *ctx, Promise *pp)
+ 
+     a = GetExecAttributes(ctx, pp);
+ 
+-    ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, CF_DATA_TYPE_STRING);
+ 
+     if (!SyntaxCheckExec(a, pp))
+     {
+diff --git a/cf-agent/verify_files.c b/cf-agent/verify_files.c
+index d117529..45ae46a 100644
+--- a/cf-agent/verify_files.c
++++ b/cf-agent/verify_files.c
+@@ -196,7 +196,7 @@ static void VerifyFilePromise(EvalContext *ctx, char *path, Promise *pp)
+     }
+ 
+     ScopeDeleteSpecial("this", "promiser");
+-    ScopeNewSpecial(ctx, "this", "promiser", path, DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "this", "promiser", path, CF_DATA_TYPE_STRING);
+     
+     thislock = AcquireLock(ctx, path, VUQNAME, CFSTARTTIME, a.transaction, pp, false);
+ 
+@@ -588,7 +588,7 @@ static void FindFilePromiserObjects(EvalContext *ctx, Promise *pp)
+     if (literal)
+     {
+         // Prime the promiser temporarily, may override later
+-        ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, CF_DATA_TYPE_STRING);
+         VerifyFilePromise(ctx, pp->promiser, pp);
+     }
+     else                        // Default is to expand regex paths
+diff --git a/cf-agent/verify_files_utils.c b/cf-agent/verify_files_utils.c
+index 21f195c..c16b965 100644
+--- a/cf-agent/verify_files_utils.c
++++ b/cf-agent/verify_files_utils.c
+@@ -124,7 +124,7 @@ int VerifyFileLeaf(EvalContext *ctx, char *path, struct stat *sb, Attributes att
+ /* We still need to augment the scope of context "this" for commands */
+ 
+     ScopeDeleteSpecial("this", "promiser");
+-    ScopeNewSpecial(ctx, "this", "promiser", path, DATA_TYPE_STRING);        // Parameters may only be scalars
++    ScopeNewSpecial(ctx, "this", "promiser", path, CF_DATA_TYPE_STRING);        // Parameters may only be scalars
+ 
+     if (attr.transformer != NULL)
+     {
+diff --git a/cf-agent/verify_methods.c b/cf-agent/verify_methods.c
+index 14296e2..e652609 100644
+--- a/cf-agent/verify_methods.c
++++ b/cf-agent/verify_methods.c
+@@ -227,7 +227,7 @@ static void GetReturnValue(EvalContext *ctx, char *scope, Promise *pp)
+                     snprintf(newname, CF_BUFSIZE, "%s", result);
+                 }
+ 
+-                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(pp)->name, newname }, assoc->rval, DATA_TYPE_STRING);
++                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(pp)->name, newname }, assoc->rval, CF_DATA_TYPE_STRING);
+             }
+         }
+         
+diff --git a/cf-agent/verify_packages.c b/cf-agent/verify_packages.c
+index 1e4ec7e..bcdbfcf 100644
+--- a/cf-agent/verify_packages.c
++++ b/cf-agent/verify_packages.c
+@@ -948,9 +948,9 @@ static void SchedulePackageOp(EvalContext *ctx, const char *name, const char *ve
+ 
+     if ((a.packages.package_name_convention) || (a.packages.package_delete_convention))
+     {
+-        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "version" }, (Rval) { version, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "version" }, (Rval) { version, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+ 
+         if ((a.packages.package_delete_convention) && (a.packages.package_policy == PACKAGE_ACTION_DELETE))
+         {
+@@ -1013,9 +1013,9 @@ static void SchedulePackageOp(EvalContext *ctx, const char *name, const char *ve
+                 ((a.packages.package_select == PACKAGE_VERSION_COMPARATOR_GT) || (a.packages.package_select == PACKAGE_VERSION_COMPARATOR_GE)))
+             {
+                 {
+-                    EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-                    EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "version" }, (Rval) { "(.*)", RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-                    EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++                    EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++                    EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "version" }, (Rval) { "(.*)", RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++                    EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+                     ExpandScalar(ctx, "cf_pack_context_anyver", a.packages.package_name_convention, refAnyVer);
+ 
+                     ScopeClear("cf_pack_context_anyver");
+@@ -1134,9 +1134,9 @@ static void SchedulePackageOp(EvalContext *ctx, const char *name, const char *ve
+             ((a.packages.package_select == PACKAGE_VERSION_COMPARATOR_GT) || (a.packages.package_select == PACKAGE_VERSION_COMPARATOR_GE)))
+         {
+             {
+-                EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-                EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "version" }, (Rval) { "(.*)", RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-                EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++                EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++                EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "version" }, (Rval) { "(.*)", RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++                EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+                 ExpandScalar(ctx, "cf_pack_context_anyver", a.packages.package_name_convention, refAnyVer);
+ 
+                 ScopeClear("cf_pack_context_anyver");
+@@ -1199,9 +1199,9 @@ static void SchedulePackageOp(EvalContext *ctx, const char *name, const char *ve
+                     }
+ 
+                     {
+-                        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-                        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "version" }, (Rval) { instVer, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
+-                        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "arch" }, (Rval) { instArch, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++                        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "name" }, (Rval) { name, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++                        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "version" }, (Rval) { instVer, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
++                        EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "arch" }, (Rval) { instArch, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+                         ExpandScalar(ctx, "cf_pack_context", a.packages.package_delete_convention, reference2);
+                         id_del = reference2;
+ 
+diff --git a/cf-agent/verify_processes.c b/cf-agent/verify_processes.c
+index ebd9975..a593aae 100644
+--- a/cf-agent/verify_processes.c
++++ b/cf-agent/verify_processes.c
+@@ -124,7 +124,7 @@ static void VerifyProcesses(EvalContext *ctx, Attributes a, Promise *pp)
+     }
+ 
+     ScopeDeleteSpecial("this", "promiser");
+-    ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, CF_DATA_TYPE_STRING);
+     PromiseBanner(pp);
+     VerifyProcessOp(ctx, PROCESSTABLE, a, pp);
+     ScopeDeleteSpecial("this", "promiser");
+diff --git a/cf-agent/verify_services.c b/cf-agent/verify_services.c
+index 9adb726..25562b4 100644
+--- a/cf-agent/verify_services.c
++++ b/cf-agent/verify_services.c
+@@ -163,7 +163,7 @@ void VerifyServices(EvalContext *ctx, Attributes a, Promise *pp)
+         return;
+     }
+ 
+-    ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, CF_DATA_TYPE_STRING);
+     PromiseBanner(pp);
+ 
+     if (strcmp(a.service.service_type, "windows") == 0)
+@@ -229,21 +229,21 @@ static void DoVerifyServices(EvalContext *ctx, Attributes a, Promise *pp)
+     switch (a.service.service_policy)
+     {
+     case SERVICE_POLICY_START:
+-        ScopeNewSpecial(ctx, "this", "service_policy", "start", DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "this", "service_policy", "start", CF_DATA_TYPE_STRING);
+         break;
+ 
+     case SERVICE_POLICY_RESTART:
+-        ScopeNewSpecial(ctx, "this", "service_policy", "restart", DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "this", "service_policy", "restart", CF_DATA_TYPE_STRING);
+         break;
+ 
+     case SERVICE_POLICY_RELOAD:
+-        ScopeNewSpecial(ctx, "this", "service_policy", "reload", DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "this", "service_policy", "reload", CF_DATA_TYPE_STRING);
+         break;
+         
+     case SERVICE_POLICY_STOP:
+     case SERVICE_POLICY_DISABLE:
+     default:
+-        ScopeNewSpecial(ctx, "this", "service_policy", "stop", DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "this", "service_policy", "stop", CF_DATA_TYPE_STRING);
+         break;
+     }
+ 
+diff --git a/cf-execd/cf-execd.c b/cf-execd/cf-execd.c
+index 3cc5d43..4776904 100644
+--- a/cf-execd/cf-execd.c
++++ b/cf-execd/cf-execd.c
+@@ -534,7 +534,7 @@ static bool ScheduleRun(EvalContext *ctx, Policy **policy, GenericAgentConfig *c
+             free(existing_policy_server);
+         }
+ 
+-        ScopeNewSpecial(ctx, "sys", "policy_hub", POLICY_SERVER, DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "sys", "policy_hub", POLICY_SERVER, CF_DATA_TYPE_STRING);
+ 
+         GetNameInfo3(ctx, AGENT_TYPE_EXECUTOR);
+         GetInterfacesInfo(ctx, AGENT_TYPE_EXECUTOR);
+diff --git a/cf-gendoc/export_xml.c b/cf-gendoc/export_xml.c
+index e8699ff..3e5c195 100644
+--- a/cf-gendoc/export_xml.c
++++ b/cf-gendoc/export_xml.c
+@@ -355,10 +355,10 @@ void XmlExportConstraint(Writer *writer, const ConstraintSyntax *bs)
+ 
+     switch (bs->dtype)
+     {
+-    case DATA_TYPE_BODY:
+-    case DATA_TYPE_BUNDLE:
+-    case DATA_TYPE_NONE:
+-    case DATA_TYPE_COUNTER:
++    case CF_DATA_TYPE_BODY:
++    case CF_DATA_TYPE_BUNDLE:
++    case CF_DATA_TYPE_NONE:
++    case CF_DATA_TYPE_COUNTER:
+         /* NO ADDITIONAL INFO */
+         break;
+ 
+@@ -394,17 +394,17 @@ static void XmlExportType(Writer *writer, const ConstraintSyntax *constraint_syn
+ 
+     switch (constraint_syntax->dtype)
+     {
+-    case DATA_TYPE_BODY:
++    case CF_DATA_TYPE_BODY:
+         /* EXPORT CONSTRAINTS */
+         XmlExportConstraints(writer, constraint_syntax->range.body_type_syntax->constraints);
+         break;
+ 
+-    case DATA_TYPE_INT:
+-    case DATA_TYPE_REAL:
+-    case DATA_TYPE_INT_LIST:
+-    case DATA_TYPE_REAL_LIST:
+-    case DATA_TYPE_INT_RANGE:
+-    case DATA_TYPE_REAL_RANGE:
++    case CF_DATA_TYPE_INT:
++    case CF_DATA_TYPE_REAL:
++    case CF_DATA_TYPE_INT_LIST:
++    case CF_DATA_TYPE_REAL_LIST:
++    case CF_DATA_TYPE_INT_RANGE:
++    case CF_DATA_TYPE_REAL_RANGE:
+         if (constraint_syntax->range.validation_string != NULL)
+         {
+             /* START XML ELEMENT -- RANGE */
+@@ -433,8 +433,8 @@ static void XmlExportType(Writer *writer, const ConstraintSyntax *constraint_syn
+             break;
+         }
+ 
+-    case DATA_TYPE_OPTION:
+-    case DATA_TYPE_OPTION_LIST:
++    case CF_DATA_TYPE_OPTION:
++    case CF_DATA_TYPE_OPTION_LIST:
+         if (constraint_syntax->range.validation_string != NULL)
+         {
+             /* START XML ELEMENT -- OPTIONS */
+@@ -454,10 +454,10 @@ static void XmlExportType(Writer *writer, const ConstraintSyntax *constraint_syn
+             break;
+         }
+ 
+-    case DATA_TYPE_STRING:
+-    case DATA_TYPE_STRING_LIST:
+-    case DATA_TYPE_CONTEXT:
+-    case DATA_TYPE_CONTEXT_LIST:
++    case CF_DATA_TYPE_STRING:
++    case CF_DATA_TYPE_STRING_LIST:
++    case CF_DATA_TYPE_CONTEXT:
++    case CF_DATA_TYPE_CONTEXT_LIST:
+         /* XML ELEMENT -- ACCEPTED-VALUES */
+         if (strlen(constraint_syntax->range.validation_string) == 0)
+         {
+@@ -470,9 +470,9 @@ static void XmlExportType(Writer *writer, const ConstraintSyntax *constraint_syn
+ 
+         break;
+ 
+-    case DATA_TYPE_BUNDLE:
+-    case DATA_TYPE_NONE:
+-    case DATA_TYPE_COUNTER:
++    case CF_DATA_TYPE_BUNDLE:
++    case CF_DATA_TYPE_NONE:
++    case CF_DATA_TYPE_COUNTER:
+         /* NONE */
+         break;
+     }
+diff --git a/cf-gendoc/manual.c b/cf-gendoc/manual.c
+index f1096ee..c1ad823 100644
+--- a/cf-gendoc/manual.c
++++ b/cf-gendoc/manual.c
+@@ -249,7 +249,7 @@ void TexinfoManual(EvalContext *ctx, const char *source_dir, const char *output_
+ 
+ // scopes const and sys
+ 
+-    ScopeNewSpecial(ctx, "edit", "filename", "x", DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "edit", "filename", "x", CF_DATA_TYPE_STRING);
+ 
+     ScopePutMatch(0, "x");
+ 
+@@ -481,7 +481,7 @@ static void TexinfoBodyParts(const char *source_dir, FILE *fout, const Constrain
+             fprintf(fout, "\n\n at node %s in %s\n at subsection @code{%s}\n\n at b{Type}: %s (Separate Bundle) \n", bs[i].lval,
+                     context, bs[i].lval, DataTypeToString(bs[i].dtype));
+         }
+-        else if (bs[i].dtype == DATA_TYPE_BODY)
++        else if (bs[i].dtype == CF_DATA_TYPE_BODY)
+         {
+             fprintf(fout, "\n\n at node %s in %s\n at subsection @code{%s} (body template)\n at noindent @b{Type}: %s\n\n",
+                     bs[i].lval, context, bs[i].lval, DataTypeToString(bs[i].dtype));
+@@ -613,7 +613,7 @@ static void TexinfoShowRange(FILE *fout, const char *s, DataType type)
+         return;
+     }
+ 
+-    if ((type == DATA_TYPE_OPTION) || (type == DATA_TYPE_OPTION_LIST))
++    if ((type == CF_DATA_TYPE_OPTION) || (type == CF_DATA_TYPE_OPTION_LIST))
+     {
+         list = RlistFromSplitString(s, ',');
+         fprintf(fout, "@noindent @b{Allowed input range}: @*\n at example");
+@@ -656,7 +656,7 @@ static void TexinfoSubBodyParts(const char *source_dir, FILE *fout, const Constr
+             fprintf(fout, "@item @code{%s}\n at b{Type}: %s\n (Separate Bundle) \n\n", bs[i].lval,
+                     DataTypeToString(bs[i].dtype));
+         }
+-        else if (bs[i].dtype == DATA_TYPE_BODY)
++        else if (bs[i].dtype == CF_DATA_TYPE_BODY)
+         {
+             fprintf(fout, "@item @code{%s}\n at b{Type}: %s\n\n", bs[i].lval, DataTypeToString(bs[i].dtype));
+             TexinfoSubBodyParts(source_dir, fout, bs[i].range.body_type_syntax->constraints);
+diff --git a/cf-monitord/verify_measurements.c b/cf-monitord/verify_measurements.c
+index 1c35a16..2a659e4 100644
+--- a/cf-monitord/verify_measurements.c
++++ b/cf-monitord/verify_measurements.c
+@@ -85,7 +85,7 @@ static bool CheckMeasureSanity(Measurement m, Promise *pp)
+         retval = false;
+     }
+ 
+-    if (m.data_type == DATA_TYPE_NONE)
++    if (m.data_type == CF_DATA_TYPE_NONE)
+     {
+         Log(LOG_LEVEL_ERR, "The promiser '%s' did not specify a data type", pp->promiser);
+         PromiseRef(LOG_LEVEL_ERR, pp);
+@@ -97,10 +97,10 @@ static bool CheckMeasureSanity(Measurement m, Promise *pp)
+         {
+             switch (m.data_type)
+             {
+-            case DATA_TYPE_COUNTER:
+-            case DATA_TYPE_STRING:
+-            case DATA_TYPE_INT:
+-            case DATA_TYPE_REAL:
++            case CF_DATA_TYPE_COUNTER:
++            case CF_DATA_TYPE_STRING:
++            case CF_DATA_TYPE_INT:
++            case CF_DATA_TYPE_REAL:
+                 break;
+ 
+             default:
+diff --git a/libpromises/attributes.c b/libpromises/attributes.c
+index 3b8e1f4..9213c61 100644
+--- a/libpromises/attributes.c
++++ b/libpromises/attributes.c
+@@ -1606,9 +1606,9 @@ Measurement GetMeasurementConstraint(const EvalContext *ctx, const Promise *pp)
+     value = ConstraintGetRvalValue(ctx, "data_type", pp, RVAL_TYPE_SCALAR);
+     m.data_type = DataTypeFromString(value);
+ 
+-    if (m.data_type == DATA_TYPE_NONE)
++    if (m.data_type == CF_DATA_TYPE_NONE)
+     {
+-        m.data_type = DATA_TYPE_STRING;
++        m.data_type = CF_DATA_TYPE_STRING;
+     }
+ 
+     m.history_type = ConstraintGetRvalValue(ctx, "history_type", pp, RVAL_TYPE_SCALAR);
+diff --git a/libpromises/bootstrap.c b/libpromises/bootstrap.c
+index b06ee35..30f4253 100644
+--- a/libpromises/bootstrap.c
++++ b/libpromises/bootstrap.c
+@@ -113,12 +113,12 @@ void SetPolicyServer(EvalContext *ctx, const char *new_policy_server)
+     if (new_policy_server)
+     {
+         snprintf(POLICY_SERVER, CF_MAX_IP_LEN, "%s", new_policy_server);
+-        ScopeNewSpecial(ctx, "sys", "policy_hub", new_policy_server, DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "sys", "policy_hub", new_policy_server, CF_DATA_TYPE_STRING);
+     }
+     else
+     {
+         POLICY_SERVER[0] = '\0';
+-        ScopeNewSpecial(ctx, "sys", "policy_hub", "undefined", DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "sys", "policy_hub", "undefined", CF_DATA_TYPE_STRING);
+     }
+ 
+     // Get the timestamp on policy update
+@@ -137,7 +137,7 @@ void SetPolicyServer(EvalContext *ctx, const char *new_policy_server)
+     char timebuf[26];
+     cf_strtimestamp_local(sb.st_mtime, timebuf);
+     
+-    ScopeNewSpecial(ctx, "sys", "last_policy_update", timebuf, DATA_TYPE_STRING);
++    ScopeNewSpecial(ctx, "sys", "last_policy_update", timebuf, CF_DATA_TYPE_STRING);
+ }
+ 
+ static char *PolicyServerFilename(const char *workdir)
+diff --git a/libpromises/cf3.defs.h b/libpromises/cf3.defs.h
+index c04c2a1..45faeee 100644
+--- a/libpromises/cf3.defs.h
++++ b/libpromises/cf3.defs.h
+@@ -428,22 +428,22 @@ typedef struct FnCall_ FnCall;
+ 
+ typedef enum
+ {
+-    DATA_TYPE_STRING,
+-    DATA_TYPE_INT,
+-    DATA_TYPE_REAL,
+-    DATA_TYPE_STRING_LIST,
+-    DATA_TYPE_INT_LIST,
+-    DATA_TYPE_REAL_LIST,
+-    DATA_TYPE_OPTION,
+-    DATA_TYPE_OPTION_LIST,
+-    DATA_TYPE_BODY,
+-    DATA_TYPE_BUNDLE,
+-    DATA_TYPE_CONTEXT,
+-    DATA_TYPE_CONTEXT_LIST,
+-    DATA_TYPE_INT_RANGE,
+-    DATA_TYPE_REAL_RANGE,
+-    DATA_TYPE_COUNTER,
+-    DATA_TYPE_NONE
++    CF_DATA_TYPE_STRING,
++    CF_DATA_TYPE_INT,
++    CF_DATA_TYPE_REAL,
++    CF_DATA_TYPE_STRING_LIST,
++    CF_DATA_TYPE_INT_LIST,
++    CF_DATA_TYPE_REAL_LIST,
++    CF_DATA_TYPE_OPTION,
++    CF_DATA_TYPE_OPTION_LIST,
++    CF_DATA_TYPE_BODY,
++    CF_DATA_TYPE_BUNDLE,
++    CF_DATA_TYPE_CONTEXT,
++    CF_DATA_TYPE_CONTEXT_LIST,
++    CF_DATA_TYPE_INT_RANGE,
++    CF_DATA_TYPE_REAL_RANGE,
++    CF_DATA_TYPE_COUNTER,
++    CF_DATA_TYPE_NONE
+ } DataType;
+ 
+ /*************************************************************************/
+diff --git a/libpromises/cf3parse.c b/libpromises/cf3parse.c
+index f382919..a516083 100644
+--- a/libpromises/cf3parse.c
++++ b/libpromises/cf3parse.c
+@@ -3120,7 +3120,7 @@ static bool LvalWantsBody(char *stype, char *lval)
+             {
+                 if (strcmp(bs[l].lval, lval) == 0)
+                 {
+-                    if (bs[l].dtype == DATA_TYPE_BODY)
++                    if (bs[l].dtype == CF_DATA_TYPE_BODY)
+                     {
+                         return true;
+                     }
+@@ -3151,11 +3151,11 @@ static SyntaxTypeMatch CheckSelection(const char *type, const char *name, const
+                 {
+                     if (strcmp(lval, bs[l].lval) == 0)
+                     {
+-                        if (bs[l].dtype == DATA_TYPE_BODY)
++                        if (bs[l].dtype == CF_DATA_TYPE_BODY)
+                         {
+                             return SYNTAX_TYPE_MATCH_OK;
+                         }
+-                        else if (bs[l].dtype == DATA_TYPE_BUNDLE)
++                        else if (bs[l].dtype == CF_DATA_TYPE_BUNDLE)
+                         {
+                             return SYNTAX_TYPE_MATCH_OK;
+                         }
+@@ -3190,7 +3190,7 @@ static SyntaxTypeMatch CheckSelection(const char *type, const char *name, const
+ 
+             for (int l = 0; bs[l].lval != NULL; l++)
+             {
+-                if (bs[l].dtype == DATA_TYPE_BODY)
++                if (bs[l].dtype == CF_DATA_TYPE_BODY)
+                 {
+                     const ConstraintSyntax *bs2 = bs[l].range.body_type_syntax->constraints;
+ 
+@@ -3199,7 +3199,7 @@ static SyntaxTypeMatch CheckSelection(const char *type, const char *name, const
+                         continue;
+                     }
+ 
+-                    for (int k = 0; bs2[k].dtype != DATA_TYPE_NONE; k++)
++                    for (int k = 0; bs2[k].dtype != CF_DATA_TYPE_NONE; k++)
+                     {
+                         /* Either module defined or common */
+ 
+@@ -3249,8 +3249,8 @@ static SyntaxTypeMatch CheckConstraint(const char *type, const char *lval, Rval
+ 
+                     /* For bodies and bundles definitions can be elsewhere, so
+                        they are checked in PolicyCheckRunnable(). */
+-                    if (bs[l].dtype != DATA_TYPE_BODY &&
+-                        bs[l].dtype != DATA_TYPE_BUNDLE)
++                    if (bs[l].dtype != CF_DATA_TYPE_BODY &&
++                        bs[l].dtype != CF_DATA_TYPE_BUNDLE)
+                     {
+                         return CheckConstraintTypeMatch(lval, rval, bs[l].dtype, bs[l].range.validation_string, 0);
+                     }
+diff --git a/libpromises/cf3parse.y b/libpromises/cf3parse.y
+index 24c4f55..98aa36c 100644
+--- a/libpromises/cf3parse.y
++++ b/libpromises/cf3parse.y
+@@ -1279,7 +1279,7 @@ static bool LvalWantsBody(char *stype, char *lval)
+             {
+                 if (strcmp(bs[l].lval, lval) == 0)
+                 {
+-                    if (bs[l].dtype == DATA_TYPE_BODY)
++                    if (bs[l].dtype == CF_DATA_TYPE_BODY)
+                     {
+                         return true;
+                     }
+@@ -1310,11 +1310,11 @@ static SyntaxTypeMatch CheckSelection(const char *type, const char *name, const
+                 {
+                     if (strcmp(lval, bs[l].lval) == 0)
+                     {
+-                        if (bs[l].dtype == DATA_TYPE_BODY)
++                        if (bs[l].dtype == CF_DATA_TYPE_BODY)
+                         {
+                             return SYNTAX_TYPE_MATCH_OK;
+                         }
+-                        else if (bs[l].dtype == DATA_TYPE_BUNDLE)
++                        else if (bs[l].dtype == CF_DATA_TYPE_BUNDLE)
+                         {
+                             return SYNTAX_TYPE_MATCH_OK;
+                         }
+@@ -1349,7 +1349,7 @@ static SyntaxTypeMatch CheckSelection(const char *type, const char *name, const
+ 
+             for (int l = 0; bs[l].lval != NULL; l++)
+             {
+-                if (bs[l].dtype == DATA_TYPE_BODY)
++                if (bs[l].dtype == CF_DATA_TYPE_BODY)
+                 {
+                     const ConstraintSyntax *bs2 = bs[l].range.body_type_syntax->constraints;
+ 
+@@ -1358,7 +1358,7 @@ static SyntaxTypeMatch CheckSelection(const char *type, const char *name, const
+                         continue;
+                     }
+ 
+-                    for (int k = 0; bs2[k].dtype != DATA_TYPE_NONE; k++)
++                    for (int k = 0; bs2[k].dtype != CF_DATA_TYPE_NONE; k++)
+                     {
+                         /* Either module defined or common */
+ 
+@@ -1408,8 +1408,8 @@ static SyntaxTypeMatch CheckConstraint(const char *type, const char *lval, Rval
+ 
+                     /* For bodies and bundles definitions can be elsewhere, so
+                        they are checked in PolicyCheckRunnable(). */
+-                    if (bs[l].dtype != DATA_TYPE_BODY &&
+-                        bs[l].dtype != DATA_TYPE_BUNDLE)
++                    if (bs[l].dtype != CF_DATA_TYPE_BODY &&
++                        bs[l].dtype != CF_DATA_TYPE_BUNDLE)
+                     {
+                         return CheckConstraintTypeMatch(lval, rval, bs[l].dtype, bs[l].range.validation_string, 0);
+                     }
+diff --git a/libpromises/conversion.c b/libpromises/conversion.c
+index 04c22b7..764556e 100644
+--- a/libpromises/conversion.c
++++ b/libpromises/conversion.c
+@@ -274,27 +274,27 @@ FileComparator FileComparatorFromString(const char *s)
+ 
+ static const char *datatype_strings[] =
+ {
+-    [DATA_TYPE_STRING] = "string",
+-    [DATA_TYPE_INT] = "int",
+-    [DATA_TYPE_REAL] = "real",
+-    [DATA_TYPE_STRING_LIST] = "slist",
+-    [DATA_TYPE_INT_LIST] = "ilist",
+-    [DATA_TYPE_REAL_LIST] = "rlist",
+-    [DATA_TYPE_OPTION] = "option",
+-    [DATA_TYPE_OPTION_LIST] = "olist",
+-    [DATA_TYPE_BODY] = "body",
+-    [DATA_TYPE_BUNDLE] = "bundle",
+-    [DATA_TYPE_CONTEXT] = "context",
+-    [DATA_TYPE_CONTEXT_LIST] = "clist",
+-    [DATA_TYPE_INT_RANGE] = "irange",
+-    [DATA_TYPE_REAL_RANGE] = "rrange",
+-    [DATA_TYPE_COUNTER] = "counter",
+-    [DATA_TYPE_NONE] = "none"
++    [CF_DATA_TYPE_STRING] = "string",
++    [CF_DATA_TYPE_INT] = "int",
++    [CF_DATA_TYPE_REAL] = "real",
++    [CF_DATA_TYPE_STRING_LIST] = "slist",
++    [CF_DATA_TYPE_INT_LIST] = "ilist",
++    [CF_DATA_TYPE_REAL_LIST] = "rlist",
++    [CF_DATA_TYPE_OPTION] = "option",
++    [CF_DATA_TYPE_OPTION_LIST] = "olist",
++    [CF_DATA_TYPE_BODY] = "body",
++    [CF_DATA_TYPE_BUNDLE] = "bundle",
++    [CF_DATA_TYPE_CONTEXT] = "context",
++    [CF_DATA_TYPE_CONTEXT_LIST] = "clist",
++    [CF_DATA_TYPE_INT_RANGE] = "irange",
++    [CF_DATA_TYPE_REAL_RANGE] = "rrange",
++    [CF_DATA_TYPE_COUNTER] = "counter",
++    [CF_DATA_TYPE_NONE] = "none"
+ };
+ 
+ DataType DataTypeFromString(const char *name)
+ {
+-    for (int i = 0; i < DATA_TYPE_NONE; i++)
++    for (int i = 0; i < CF_DATA_TYPE_NONE; i++)
+     {
+         if (strcmp(datatype_strings[i], name) == 0)
+         {
+@@ -302,12 +302,12 @@ DataType DataTypeFromString(const char *name)
+         }
+     }
+ 
+-    return DATA_TYPE_NONE;
++    return CF_DATA_TYPE_NONE;
+ }
+ 
+ const char *DataTypeToString(DataType type)
+ {
+-    assert(type < DATA_TYPE_NONE);
++    assert(type < CF_DATA_TYPE_NONE);
+     return datatype_strings[type];
+ }
+ 
+@@ -323,7 +323,7 @@ DataType ConstraintSyntaxGetDataType(const ConstraintSyntax *body_syntax, const
+         }
+     }
+ 
+-    return DATA_TYPE_NONE;
++    return CF_DATA_TYPE_NONE;
+ }
+ 
+ /****************************************************************************/
+diff --git a/libpromises/env_context.c b/libpromises/env_context.c
+index db85f53..4203cee 100644
+--- a/libpromises/env_context.c
++++ b/libpromises/env_context.c
+@@ -1194,7 +1194,7 @@ char *EvalContextStackPath(const EvalContext *ctx)
+ 
+ bool EvalContextVariablePut(EvalContext *ctx, VarRef lval, Rval rval, DataType type)
+ {
+-    assert(type != DATA_TYPE_NONE);
++    assert(type != CF_DATA_TYPE_NONE);
+ 
+     if (lval.lval == NULL || lval.scope == NULL)
+     {
+@@ -1320,7 +1320,7 @@ bool EvalContextVariableGet(const EvalContext *ctx, VarRef lval, Rval *rval_out,
+         }
+         if (type_out)
+         {
+-            *type_out = DATA_TYPE_NONE;
++            *type_out = CF_DATA_TYPE_NONE;
+         }
+         return false;
+     }
+@@ -1345,7 +1345,7 @@ bool EvalContextVariableGet(const EvalContext *ctx, VarRef lval, Rval *rval_out,
+             }
+             if (type_out)
+             {
+-                *type_out = DATA_TYPE_NONE;
++                *type_out = CF_DATA_TYPE_NONE;
+             }
+             return false;
+         }
+@@ -1386,7 +1386,7 @@ bool EvalContextVariableGet(const EvalContext *ctx, VarRef lval, Rval *rval_out,
+         }
+         if (type_out)
+         {
+-            *type_out = DATA_TYPE_NONE;
++            *type_out = CF_DATA_TYPE_NONE;
+         }
+         return false;
+     }
+@@ -1400,7 +1400,7 @@ bool EvalContextVariableGet(const EvalContext *ctx, VarRef lval, Rval *rval_out,
+         }
+         if (type_out)
+         {
+-            *type_out = DATA_TYPE_NONE;
++            *type_out = CF_DATA_TYPE_NONE;
+         }
+         return false;
+     }
+@@ -1412,7 +1412,7 @@ bool EvalContextVariableGet(const EvalContext *ctx, VarRef lval, Rval *rval_out,
+     if (type_out)
+     {
+         *type_out = assoc->dtype;
+-        assert(*type_out != DATA_TYPE_NONE);
++        assert(*type_out != CF_DATA_TYPE_NONE);
+     }
+ 
+     return true;
+diff --git a/libpromises/evalfunction.c b/libpromises/evalfunction.c
+index a1773dc..1d314cb 100644
+--- a/libpromises/evalfunction.c
++++ b/libpromises/evalfunction.c
+@@ -227,7 +227,7 @@ static FnCallResult FnCallAnd(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ /* We need to check all the arguments, ArgTemplate does not check varadic functions */
+     for (arg = finalargs; arg; arg = arg->next)
+     {
+-        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, DATA_TYPE_STRING, "", 1);
++        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, CF_DATA_TYPE_STRING, "", 1);
+         if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+         {
+             FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -634,7 +634,7 @@ static FnCallResult FnCallConcat(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ /* We need to check all the arguments, ArgTemplate does not check varadic functions */
+     for (arg = finalargs; arg; arg = arg->next)
+     {
+-        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, DATA_TYPE_STRING, "", 1);
++        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, CF_DATA_TYPE_STRING, "", 1);
+         if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+         {
+             FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -683,7 +683,7 @@ static FnCallResult FnCallIfElse(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+     /* We need to check all the arguments, ArgTemplate does not check varadic functions */
+     for (arg = finalargs; arg; arg = arg->next)
+     {
+-        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, DATA_TYPE_STRING, "", 1);
++        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, CF_DATA_TYPE_STRING, "", 1);
+         if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+         {
+             FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -1610,7 +1610,7 @@ static FnCallResult FnCallGetFields(EvalContext *ctx, FnCall *fp, Rlist *finalar
+             for (rp = newlist; rp != NULL; rp = rp->next)
+             {
+                 snprintf(name, CF_MAXVARSIZE - 1, "%s[%d]", array_lval, vcount);
+-                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, name }, (Rval) { RlistScalarValue(rp), RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, name }, (Rval) { RlistScalarValue(rp), RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+                 Log(LOG_LEVEL_VERBOSE, "getfields: defining '%s' => '%s'", name, RlistScalarValue(rp));
+                 vcount++;
+             }
+@@ -1794,12 +1794,12 @@ static FnCallResult FnCallMapArray(EvalContext *ctx, FnCall *fp, Rlist *finalarg
+ 
+             if (strlen(index) > 0)
+             {
+-                ScopeNewSpecial(ctx, "this", "k", index, DATA_TYPE_STRING);
++                ScopeNewSpecial(ctx, "this", "k", index, CF_DATA_TYPE_STRING);
+ 
+                 switch (assoc->rval.type)
+                 {
+                 case RVAL_TYPE_SCALAR:
+-                    ScopeNewSpecial(ctx, "this", "v", assoc->rval.item, DATA_TYPE_STRING);
++                    ScopeNewSpecial(ctx, "this", "v", assoc->rval.item, CF_DATA_TYPE_STRING);
+                     ExpandScalar(ctx, PromiseGetBundle(fp->caller)->name, map, expbuf);
+ 
+                     if (strstr(expbuf, "$(this.k)") || strstr(expbuf, "${this.k}") ||
+@@ -1818,7 +1818,7 @@ static FnCallResult FnCallMapArray(EvalContext *ctx, FnCall *fp, Rlist *finalarg
+                 case RVAL_TYPE_LIST:
+                     for (rp = assoc->rval.item; rp != NULL; rp = rp->next)
+                     {
+-                        ScopeNewSpecial(ctx, "this", "v", rp->item, DATA_TYPE_STRING);
++                        ScopeNewSpecial(ctx, "this", "v", rp->item, CF_DATA_TYPE_STRING);
+                         ExpandScalar(ctx, PromiseGetBundle(fp->caller)->name, map, expbuf);
+ 
+                         if (strstr(expbuf, "$(this.k)") || strstr(expbuf, "${this.k}") ||
+@@ -1896,13 +1896,13 @@ static FnCallResult FnCallMapList(EvalContext *ctx, FnCall *fp, Rlist *finalargs
+         return (FnCallResult) { FNCALL_FAILURE };
+     }
+ 
+-    retype = DATA_TYPE_NONE;
++    retype = CF_DATA_TYPE_NONE;
+     if (!EvalContextVariableGet(ctx, (VarRef) { NULL, scopeid, lval }, &rval, &retype))
+     {
+         return (FnCallResult) { FNCALL_FAILURE };
+     }
+ 
+-    if (retype != DATA_TYPE_STRING_LIST && retype != DATA_TYPE_INT_LIST && retype != DATA_TYPE_REAL_LIST)
++    if (retype != CF_DATA_TYPE_STRING_LIST && retype != CF_DATA_TYPE_INT_LIST && retype != CF_DATA_TYPE_REAL_LIST)
+     {
+         return (FnCallResult) { FNCALL_FAILURE };
+     }
+@@ -1910,7 +1910,7 @@ static FnCallResult FnCallMapList(EvalContext *ctx, FnCall *fp, Rlist *finalargs
+     for (const Rlist *rp = RvalRlistValue(rval); rp != NULL; rp = rp->next)
+     {
+         const char *current_value = RlistScalarValue(rp);
+-        ScopeNewSpecial(ctx, "this", "this", current_value, DATA_TYPE_STRING);
++        ScopeNewSpecial(ctx, "this", "this", current_value, CF_DATA_TYPE_STRING);
+ 
+         ExpandScalar(ctx, "this", map, expbuf);
+ 
+@@ -2050,7 +2050,7 @@ static FnCallResult FnCallSelectServers(EvalContext *ctx, FnCall *fp, Rlist *fin
+             {
+                 Log(LOG_LEVEL_VERBOSE, "Host '%s' is alive and responding correctly", RlistScalarValue(rp));
+                 snprintf(buffer, CF_MAXVARSIZE - 1, "%s[%d]", array_lval, count);
+-                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, buffer }, (Rval) { rp->item, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, buffer }, (Rval) { rp->item, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+                 count++;
+             }
+         }
+@@ -2058,7 +2058,7 @@ static FnCallResult FnCallSelectServers(EvalContext *ctx, FnCall *fp, Rlist *fin
+         {
+             Log(LOG_LEVEL_VERBOSE, "Host '%s' is alive", RlistScalarValue(rp));
+             snprintf(buffer, CF_MAXVARSIZE - 1, "%s[%d]", array_lval, count);
+-            EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, buffer }, (Rval) { rp->item, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++            EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, buffer }, (Rval) { rp->item, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+ 
+             if (IsDefinedClass(ctx, CanonifyName(rp->item), PromiseGetNamespace(fp->caller)))
+             {
+@@ -2091,14 +2091,14 @@ static FnCallResult FnCallShuffle(EvalContext *ctx, FnCall *fp, Rlist *finalargs
+     const char *seed_str = RlistScalarValue(finalargs->next);
+ 
+     Rval list_rval;
+-    DataType list_dtype = DATA_TYPE_NONE;
++    DataType list_dtype = CF_DATA_TYPE_NONE;
+ 
+     if (!GetListReferenceArgument(ctx, fp, RlistScalarValue(finalargs), &list_rval, &list_dtype))
+     {
+         return (FnCallResult) { FNCALL_FAILURE };
+     }
+ 
+-    if (list_dtype != DATA_TYPE_STRING_LIST)
++    if (list_dtype != CF_DATA_TYPE_STRING_LIST)
+     {
+         Log(LOG_LEVEL_ERR, "Function '%s' expected a variable that resolves to a string list, got '%s'", fp->name, DataTypeToString(list_dtype));
+         return (FnCallResult) { FNCALL_FAILURE };
+@@ -2716,7 +2716,7 @@ static FnCallResult FnCallSort(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ {
+     VarRef list_var_lval = VarRefParseFromBundle(RlistScalarValue(finalargs), PromiseGetBundle(fp->caller));
+     Rval list_var_rval;
+-    DataType list_var_dtype = DATA_TYPE_NONE;
++    DataType list_var_dtype = CF_DATA_TYPE_NONE;
+ 
+     if (!EvalContextVariableGet(ctx, list_var_lval, &list_var_rval, &list_var_dtype))
+     {
+@@ -2726,7 +2726,7 @@ static FnCallResult FnCallSort(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ 
+     VarRefDestroy(list_var_lval);
+ 
+-    if (list_var_dtype != DATA_TYPE_STRING_LIST)
++    if (list_var_dtype != CF_DATA_TYPE_STRING_LIST)
+     {
+         return (FnCallResult) { FNCALL_FAILURE };
+     }
+@@ -2747,7 +2747,7 @@ static FnCallResult FnCallFormat(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ /* We need to check all the arguments, ArgTemplate does not check varadic functions */
+     for (const Rlist *arg = finalargs; arg; arg = arg->next)
+     {
+-        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, DATA_TYPE_STRING, "", 1);
++        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, CF_DATA_TYPE_STRING, "", 1);
+         if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+         {
+             FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -3550,7 +3550,7 @@ static FnCallResult FnCallRegExtract(EvalContext *ctx, FnCall *fp, Rlist *finala
+             else
+             {
+                 snprintf(var, CF_MAXVARSIZE - 1, "%s[%s]", arrayname, assoc->lval);
+-                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, var }, assoc->rval, DATA_TYPE_STRING);
++                EvalContextVariablePut(ctx, (VarRef) { NULL, PromiseGetBundle(fp->caller)->name, var }, assoc->rval, CF_DATA_TYPE_STRING);
+             }
+         }
+     }
+@@ -3760,14 +3760,14 @@ static FnCallResult FnCallRRange(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ static FnCallResult FnCallReverse(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ {
+     Rval list_rval;
+-    DataType list_dtype = DATA_TYPE_NONE;
++    DataType list_dtype = CF_DATA_TYPE_NONE;
+ 
+     if (!GetListReferenceArgument(ctx, fp, RlistScalarValue(finalargs), &list_rval, &list_dtype))
+     {
+         return (FnCallResult) { FNCALL_FAILURE };
+     }
+ 
+-    if (list_dtype != DATA_TYPE_STRING_LIST)
++    if (list_dtype != CF_DATA_TYPE_STRING_LIST)
+     {
+         Log(LOG_LEVEL_ERR, "Function '%s' expected a variable that resolves to a string list, got '%s'", fp->name, DataTypeToString(list_dtype));
+         return (FnCallResult) { FNCALL_FAILURE };
+@@ -3837,7 +3837,7 @@ static FnCallResult FnCallOr(EvalContext *ctx, FnCall *fp, Rlist *finalargs)
+ /* We need to check all the arguments, ArgTemplate does not check varadic functions */
+     for (arg = finalargs; arg; arg = arg->next)
+     {
+-        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, DATA_TYPE_STRING, "", 1);
++        SyntaxTypeMatch err = CheckConstraintTypeMatch(id, (Rval) {arg->item, arg->type}, CF_DATA_TYPE_STRING, "", 1);
+         if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+         {
+             FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -4117,10 +4117,10 @@ static FnCallResult ReadList(EvalContext *ctx, FnCall *fp, Rlist *finalargs, Dat
+ 
+     switch (type)
+     {
+-    case DATA_TYPE_STRING:
++    case CF_DATA_TYPE_STRING:
+         break;
+ 
+-    case DATA_TYPE_INT:
++    case CF_DATA_TYPE_INT:
+         for (rp = newlist; rp != NULL; rp = rp->next)
+         {
+             if (IntFromString(RlistScalarValue(rp)) == CF_NOINT)
+@@ -4132,7 +4132,7 @@ static FnCallResult ReadList(EvalContext *ctx, FnCall *fp, Rlist *finalargs, Dat
+         }
+         break;
+ 
+-    case DATA_TYPE_REAL:
++    case CF_DATA_TYPE_REAL:
+         for (rp = newlist; rp != NULL; rp = rp->next)
+         {
+             double real_value = 0;
+@@ -4164,17 +4164,17 @@ static FnCallResult ReadList(EvalContext *ctx, FnCall *fp, Rlist *finalargs, Dat
+ 
+ static FnCallResult FnCallReadStringList(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ReadList(ctx, fp, args, DATA_TYPE_STRING);
++    return ReadList(ctx, fp, args, CF_DATA_TYPE_STRING);
+ }
+ 
+ static FnCallResult FnCallReadIntList(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ReadList(ctx, fp, args, DATA_TYPE_INT);
++    return ReadList(ctx, fp, args, CF_DATA_TYPE_INT);
+ }
+ 
+ static FnCallResult FnCallReadRealList(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ReadList(ctx, fp, args, DATA_TYPE_REAL);
++    return ReadList(ctx, fp, args, CF_DATA_TYPE_REAL);
+ }
+ 
+ /*********************************************************************/
+@@ -4229,9 +4229,9 @@ static FnCallResult ReadArray(EvalContext *ctx, FnCall *fp, Rlist *finalargs, Da
+ 
+     switch (type)
+     {
+-    case DATA_TYPE_STRING:
+-    case DATA_TYPE_INT:
+-    case DATA_TYPE_REAL:
++    case CF_DATA_TYPE_STRING:
++    case CF_DATA_TYPE_INT:
++    case CF_DATA_TYPE_REAL:
+         break;
+ 
+     default:
+@@ -4250,28 +4250,28 @@ static FnCallResult ReadArray(EvalContext *ctx, FnCall *fp, Rlist *finalargs, Da
+ 
+ static FnCallResult FnCallReadStringArray(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ReadArray(ctx, fp, args, DATA_TYPE_STRING, false);
++    return ReadArray(ctx, fp, args, CF_DATA_TYPE_STRING, false);
+ }
+ 
+ /*********************************************************************/
+ 
+ static FnCallResult FnCallReadStringArrayIndex(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ReadArray(ctx, fp, args, DATA_TYPE_STRING, true);
++    return ReadArray(ctx, fp, args, CF_DATA_TYPE_STRING, true);
+ }
+ 
+ /*********************************************************************/
+ 
+ static FnCallResult FnCallReadIntArray(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ReadArray(ctx, fp, args, DATA_TYPE_INT, false);
++    return ReadArray(ctx, fp, args, CF_DATA_TYPE_INT, false);
+ }
+ 
+ /*********************************************************************/
+ 
+ static FnCallResult FnCallReadRealArray(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ReadArray(ctx, fp, args, DATA_TYPE_REAL, false);
++    return ReadArray(ctx, fp, args, CF_DATA_TYPE_REAL, false);
+ }
+ 
+ /*********************************************************************/
+@@ -4328,9 +4328,9 @@ static FnCallResult ParseArray(EvalContext *ctx, FnCall *fp, Rlist *finalargs, D
+ 
+     switch (type)
+     {
+-    case DATA_TYPE_STRING:
+-    case DATA_TYPE_INT:
+-    case DATA_TYPE_REAL:
++    case CF_DATA_TYPE_STRING:
++    case CF_DATA_TYPE_INT:
++    case CF_DATA_TYPE_REAL:
+         break;
+ 
+     default:
+@@ -4349,28 +4349,28 @@ static FnCallResult ParseArray(EvalContext *ctx, FnCall *fp, Rlist *finalargs, D
+ 
+ static FnCallResult FnCallParseStringArray(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ParseArray(ctx, fp, args, DATA_TYPE_STRING, false);
++    return ParseArray(ctx, fp, args, CF_DATA_TYPE_STRING, false);
+ }
+ 
+ /*********************************************************************/
+ 
+ static FnCallResult FnCallParseStringArrayIndex(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ParseArray(ctx, fp, args, DATA_TYPE_STRING, true);
++    return ParseArray(ctx, fp, args, CF_DATA_TYPE_STRING, true);
+ }
+ 
+ /*********************************************************************/
+ 
+ static FnCallResult FnCallParseIntArray(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ParseArray(ctx, fp, args, DATA_TYPE_INT, false);
++    return ParseArray(ctx, fp, args, CF_DATA_TYPE_INT, false);
+ }
+ 
+ /*********************************************************************/
+ 
+ static FnCallResult FnCallParseRealArray(EvalContext *ctx, FnCall *fp, Rlist *args)
+ {
+-    return ParseArray(ctx, fp, args, DATA_TYPE_REAL, false);
++    return ParseArray(ctx, fp, args, CF_DATA_TYPE_REAL, false);
+ }
+ 
+ /*********************************************************************/
+@@ -4855,16 +4855,16 @@ static int BuildLineArray(EvalContext *ctx, const Bundle *bundle, char *array_lv
+ 
+             switch (type)
+             {
+-            case DATA_TYPE_STRING:
++            case CF_DATA_TYPE_STRING:
+                 strncpy(this_rval, rp->item, CF_MAXVARSIZE - 1);
+                 break;
+ 
+-            case DATA_TYPE_INT:
++            case CF_DATA_TYPE_INT:
+                 ival = IntFromString(rp->item);
+                 snprintf(this_rval, CF_MAXVARSIZE, "%d", (int) ival);
+                 break;
+ 
+-            case DATA_TYPE_REAL:
++            case CF_DATA_TYPE_REAL:
+                 {
+                     double real_value = 0;
+                     if (!DoubleFromString(rp->item, &real_value))
+@@ -5029,7 +5029,7 @@ void ModuleProtocol(EvalContext *ctx, char *command, char *line, int print, cons
+         if (CheckID(name))
+         {
+             Log(LOG_LEVEL_VERBOSE, "Defined variable '%s' in context '%s' with value '%s'", name, context, content);
+-            EvalContextVariablePut(ctx, (VarRef) { NULL, context, name }, (Rval) { content, RVAL_TYPE_SCALAR }, DATA_TYPE_STRING);
++            EvalContextVariablePut(ctx, (VarRef) { NULL, context, name }, (Rval) { content, RVAL_TYPE_SCALAR }, CF_DATA_TYPE_STRING);
+         }
+         break;
+ 
+@@ -5044,7 +5044,7 @@ void ModuleProtocol(EvalContext *ctx, char *command, char *line, int print, cons
+             list = RlistParseString(content);
+             Log(LOG_LEVEL_VERBOSE, "Defined variable '%s' in context '%s' with value '%s'", name, context, content);
+ 
+-            EvalContextVariablePut(ctx, (VarRef) { NULL, context, name }, (Rval) { list, RVAL_TYPE_LIST }, DATA_TYPE_STRING_LIST);
++            EvalContextVariablePut(ctx, (VarRef) { NULL, context, name }, (Rval) { list, RVAL_TYPE_LIST }, CF_DATA_TYPE_STRING_LIST);
+         }
+         break;
+ 
+@@ -5096,728 +5096,728 @@ FnCallResult CallFunction(EvalContext *ctx, const FnCallType *function, FnCall *
+ 
+ FnCallArg ACCESSEDBEFORE_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Newer filename"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Older filename"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Newer filename"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Older filename"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg ACCUM_ARGS[] =
+ {
+-    {"0,1000", DATA_TYPE_INT, "Years"},
+-    {"0,1000", DATA_TYPE_INT, "Months"},
+-    {"0,1000", DATA_TYPE_INT, "Days"},
+-    {"0,1000", DATA_TYPE_INT, "Hours"},
+-    {"0,1000", DATA_TYPE_INT, "Minutes"},
+-    {"0,40000", DATA_TYPE_INT, "Seconds"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {"0,1000", CF_DATA_TYPE_INT, "Years"},
++    {"0,1000", CF_DATA_TYPE_INT, "Months"},
++    {"0,1000", CF_DATA_TYPE_INT, "Days"},
++    {"0,1000", CF_DATA_TYPE_INT, "Hours"},
++    {"0,1000", CF_DATA_TYPE_INT, "Minutes"},
++    {"0,40000", CF_DATA_TYPE_INT, "Seconds"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg AND_ARGS[] =
+ {
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg AGO_ARGS[] =
+ {
+-    {"0,1000", DATA_TYPE_INT, "Years"},
+-    {"0,1000", DATA_TYPE_INT, "Months"},
+-    {"0,1000", DATA_TYPE_INT, "Days"},
+-    {"0,1000", DATA_TYPE_INT, "Hours"},
+-    {"0,1000", DATA_TYPE_INT, "Minutes"},
+-    {"0,40000", DATA_TYPE_INT, "Seconds"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {"0,1000", CF_DATA_TYPE_INT, "Years"},
++    {"0,1000", CF_DATA_TYPE_INT, "Months"},
++    {"0,1000", CF_DATA_TYPE_INT, "Days"},
++    {"0,1000", CF_DATA_TYPE_INT, "Hours"},
++    {"0,1000", CF_DATA_TYPE_INT, "Minutes"},
++    {"0,40000", CF_DATA_TYPE_INT, "Seconds"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg LATERTHAN_ARGS[] =
+ {
+-    {"0,1000", DATA_TYPE_INT, "Years"},
+-    {"0,1000", DATA_TYPE_INT, "Months"},
+-    {"0,1000", DATA_TYPE_INT, "Days"},
+-    {"0,1000", DATA_TYPE_INT, "Hours"},
+-    {"0,1000", DATA_TYPE_INT, "Minutes"},
+-    {"0,40000", DATA_TYPE_INT, "Seconds"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {"0,1000", CF_DATA_TYPE_INT, "Years"},
++    {"0,1000", CF_DATA_TYPE_INT, "Months"},
++    {"0,1000", CF_DATA_TYPE_INT, "Days"},
++    {"0,1000", CF_DATA_TYPE_INT, "Hours"},
++    {"0,1000", CF_DATA_TYPE_INT, "Minutes"},
++    {"0,40000", CF_DATA_TYPE_INT, "Seconds"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg CANONIFY_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "String containing non-identifier characters"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "String containing non-identifier characters"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg CHANGEDBEFORE_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Newer filename"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Older filename"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Newer filename"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Older filename"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg CLASSIFY_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Input string"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Input string"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg CLASSMATCH_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg CONCAT_ARGS[] =
+ {
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg COUNTCLASSESMATCHING_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg COUNTLINESMATCHING_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Filename"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Filename"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg DIRNAME_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "File path"},
+-    {NULL, DATA_TYPE_NONE, NULL},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "File path"},
++    {NULL, CF_DATA_TYPE_NONE, NULL},
+ };
+ 
+ FnCallArg DISKFREE_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File system directory"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File system directory"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg ESCAPE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "IP address or string to escape"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "IP address or string to escape"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg EXECRESULT_ARGS[] =
+ {
+-    {CF_PATHRANGE, DATA_TYPE_STRING, "Fully qualified command path"},
+-    {"useshell,noshell,powershell", DATA_TYPE_OPTION, "Shell encapsulation option"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_PATHRANGE, CF_DATA_TYPE_STRING, "Fully qualified command path"},
++    {"useshell,noshell,powershell", CF_DATA_TYPE_OPTION, "Shell encapsulation option"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ // fileexists, isdir,isplain,islink
+ 
+ FnCallArg FILESTAT_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File object name"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File object name"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg FILESTAT_DETAIL_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File object name"},
+-    {"size,gid,uid,ino,nlink,ctime,atime,mtime,mode,modeoct,permstr,permoct,type,devno,dev_minor,dev_major,basename,dirname", DATA_TYPE_OPTION, "stat() field to get"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File object name"},
++    {"size,gid,uid,ino,nlink,ctime,atime,mtime,mode,modeoct,permstr,permoct,type,devno,dev_minor,dev_major,basename,dirname", CF_DATA_TYPE_OPTION, "stat() field to get"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg FILESEXIST_ARGS[] =
+ {
+-    {CF_NAKEDLRANGE, DATA_TYPE_STRING, "Array identifier containing list"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_NAKEDLRANGE, CF_DATA_TYPE_STRING, "Array identifier containing list"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg FILTER_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression or string"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {CF_BOOL, DATA_TYPE_OPTION, "Match as regular expression if true, as exact string otherwise"},
+-    {CF_BOOL, DATA_TYPE_OPTION, "Invert matches"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of matches to return"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression or string"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {CF_BOOL, CF_DATA_TYPE_OPTION, "Match as regular expression if true, as exact string otherwise"},
++    {CF_BOOL, CF_DATA_TYPE_OPTION, "Invert matches"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of matches to return"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GETFIELDS_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression to match line"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Filename to read"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression to split fields"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Return array name"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression to match line"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Filename to read"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression to split fields"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Return array name"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GETINDICES_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine array identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine array identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GETUSERS_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Comma separated list of User names"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Comma separated list of UserID numbers"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Comma separated list of User names"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Comma separated list of UserID numbers"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GETENV_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Name of environment variable"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of characters to read "},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Name of environment variable"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of characters to read "},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GETGID_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Group name in text"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Group name in text"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GETUID_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "User name in text"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "User name in text"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GREP_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg GROUPEXISTS_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Group name or identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Group name or identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HASH_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Input text"},
+-    {"md5,sha1,sha256,sha512,sha384,crypt", DATA_TYPE_OPTION, "Hash or digest algorithm"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Input text"},
++    {"md5,sha1,sha256,sha512,sha384,crypt", CF_DATA_TYPE_OPTION, "Hash or digest algorithm"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HASHMATCH_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Filename to hash"},
+-    {"md5,sha1,crypt,cf_sha224,cf_sha256,cf_sha384,cf_sha512", DATA_TYPE_OPTION, "Hash or digest algorithm"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "ASCII representation of hash for comparison"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Filename to hash"},
++    {"md5,sha1,crypt,cf_sha224,cf_sha256,cf_sha384,cf_sha512", CF_DATA_TYPE_OPTION, "Hash or digest algorithm"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "ASCII representation of hash for comparison"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HOST2IP_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Host name in ascii"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Host name in ascii"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg IP2HOST_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "IP address (IPv4 or IPv6)"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "IP address (IPv4 or IPv6)"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HOSTINNETGROUP_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Netgroup name"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Netgroup name"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HOSTRANGE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Hostname prefix"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Enumerated range"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Hostname prefix"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Enumerated range"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HOSTSSEEN_ARGS[] =
+ {
+-    {CF_VALRANGE, DATA_TYPE_INT, "Horizon since last seen in hours"},
+-    {"lastseen,notseen", DATA_TYPE_OPTION, "Complements for selection policy"},
+-    {"name,address", DATA_TYPE_OPTION, "Type of return value desired"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Horizon since last seen in hours"},
++    {"lastseen,notseen", CF_DATA_TYPE_OPTION, "Complements for selection policy"},
++    {"name,address", CF_DATA_TYPE_OPTION, "Type of return value desired"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HOSTSWITHCLASS_ARGS[] =
+ {
+-    {"[a-zA-Z0-9_]+", DATA_TYPE_STRING, "Class name to look for"},
+-    {"name,address", DATA_TYPE_OPTION, "Type of return value desired"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {"[a-zA-Z0-9_]+", CF_DATA_TYPE_STRING, "Class name to look for"},
++    {"name,address", CF_DATA_TYPE_OPTION, "Type of return value desired"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg IFELSE_ARGS[] =
+ {
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg IPRANGE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "IP address range syntax"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "IP address range syntax"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg IRANGE_ARGS[] =
+ {
+-    {CF_INTRANGE, DATA_TYPE_INT, "Integer"},
+-    {CF_INTRANGE, DATA_TYPE_INT, "Integer"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_INTRANGE, CF_DATA_TYPE_INT, "Integer"},
++    {CF_INTRANGE, CF_DATA_TYPE_INT, "Integer"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg ISGREATERTHAN_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Larger string or value"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Smaller string or value"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Larger string or value"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Smaller string or value"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg ISLESSTHAN_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Smaller string or value"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Larger string or value"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Smaller string or value"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Larger string or value"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg ISNEWERTHAN_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Newer file name"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Older file name"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Newer file name"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Older file name"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg ISVARIABLE_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Variable identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Variable identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg JOIN_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Join glue-string"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Join glue-string"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg LASTNODE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Input string"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Link separator, e.g. /,:"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Input string"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Link separator, e.g. /,:"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg LDAPARRAY_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Array name"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "URI"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Distinguished name"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Filter"},
+-    {"subtree,onelevel,base", DATA_TYPE_OPTION, "Search scope policy"},
+-    {"none,ssl,sasl", DATA_TYPE_OPTION, "Security level"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Array name"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "URI"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Distinguished name"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Filter"},
++    {"subtree,onelevel,base", CF_DATA_TYPE_OPTION, "Search scope policy"},
++    {"none,ssl,sasl", CF_DATA_TYPE_OPTION, "Security level"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg LDAPLIST_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "URI"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Distinguished name"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Filter"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Record name"},
+-    {"subtree,onelevel,base", DATA_TYPE_OPTION, "Search scope policy"},
+-    {"none,ssl,sasl", DATA_TYPE_OPTION, "Security level"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "URI"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Distinguished name"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Filter"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Record name"},
++    {"subtree,onelevel,base", CF_DATA_TYPE_OPTION, "Search scope policy"},
++    {"none,ssl,sasl", CF_DATA_TYPE_OPTION, "Security level"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg LDAPVALUE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "URI"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Distinguished name"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Filter"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Record name"},
+-    {"subtree,onelevel,base", DATA_TYPE_OPTION, "Search scope policy"},
+-    {"none,ssl,sasl", DATA_TYPE_OPTION, "Security level"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "URI"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Distinguished name"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Filter"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Record name"},
++    {"subtree,onelevel,base", CF_DATA_TYPE_OPTION, "Search scope policy"},
++    {"none,ssl,sasl", CF_DATA_TYPE_OPTION, "Security level"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg LSDIRLIST_ARGS[] =
+ {
+-    {CF_PATHRANGE, DATA_TYPE_STRING, "Path to base directory"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression to match files or blank"},
+-    {CF_BOOL, DATA_TYPE_OPTION, "Include the base path in the list"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_PATHRANGE, CF_DATA_TYPE_STRING, "Path to base directory"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression to match files or blank"},
++    {CF_BOOL, CF_DATA_TYPE_OPTION, "Include the base path in the list"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg MAPLIST_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Pattern based on $(this) as original text"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "The name of the list variable to map"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Pattern based on $(this) as original text"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "The name of the list variable to map"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg MAPARRAY_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Pattern based on $(this.k) and $(this.v) as original text"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "The name of the array variable to map"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Pattern based on $(this.k) and $(this.v) as original text"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "The name of the array variable to map"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg NOT_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Class value"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Class value"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg NOW_ARGS[] =
+ {
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg OR_ARGS[] =
+ {
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SUM_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "A list of arbitrary real values"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "A list of arbitrary real values"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg PRODUCT_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "A list of arbitrary real values"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "A list of arbitrary real values"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg DATE_ARGS[] =
+ {
+-    {"1970,3000", DATA_TYPE_INT, "Year"},
+-    {"1,12", DATA_TYPE_INT, "Month"},
+-    {"1,31", DATA_TYPE_INT, "Day"},
+-    {"0,23", DATA_TYPE_INT, "Hour"},
+-    {"0,59", DATA_TYPE_INT, "Minute"},
+-    {"0,59", DATA_TYPE_INT, "Second"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {"1970,3000", CF_DATA_TYPE_INT, "Year"},
++    {"1,12", CF_DATA_TYPE_INT, "Month"},
++    {"1,31", CF_DATA_TYPE_INT, "Day"},
++    {"0,23", CF_DATA_TYPE_INT, "Hour"},
++    {"0,59", CF_DATA_TYPE_INT, "Minute"},
++    {"0,59", CF_DATA_TYPE_INT, "Second"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg PEERS_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name of host list"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Comment regex pattern"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Peer group size"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File name of host list"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Comment regex pattern"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Peer group size"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg PEERLEADER_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name of host list"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Comment regex pattern"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Peer group size"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File name of host list"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Comment regex pattern"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Peer group size"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg PEERLEADERS_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name of host list"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Comment regex pattern"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Peer group size"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File name of host list"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Comment regex pattern"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Peer group size"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg RANDOMINT_ARGS[] =
+ {
+-    {CF_INTRANGE, DATA_TYPE_INT, "Lower inclusive bound"},
+-    {CF_INTRANGE, DATA_TYPE_INT, "Upper inclusive bound"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_INTRANGE, CF_DATA_TYPE_INT, "Lower inclusive bound"},
++    {CF_INTRANGE, CF_DATA_TYPE_INT, "Upper inclusive bound"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg READFILE_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of bytes to read"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File name"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of bytes to read"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg READSTRINGARRAY_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Array identifier to populate"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name to read"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex matching comments"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to split data"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of entries to read"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum bytes to read"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Array identifier to populate"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File name to read"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex matching comments"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex to split data"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of entries to read"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum bytes to read"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg PARSESTRINGARRAY_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Array identifier to populate"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "A string to parse for input data"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex matching comments"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to split data"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of entries to read"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum bytes to read"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Array identifier to populate"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "A string to parse for input data"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex matching comments"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex to split data"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of entries to read"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum bytes to read"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg READSTRINGARRAYIDX_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Array identifier to populate"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "A string to parse for input data"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex matching comments"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to split data"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of entries to read"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum bytes to read"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Array identifier to populate"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "A string to parse for input data"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex matching comments"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex to split data"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of entries to read"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum bytes to read"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg PARSESTRINGARRAYIDX_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Array identifier to populate"},
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "A string to parse for input data"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex matching comments"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to split data"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of entries to read"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum bytes to read"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Array identifier to populate"},
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "A string to parse for input data"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex matching comments"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex to split data"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of entries to read"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum bytes to read"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg READSTRINGLIST_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name to read"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex matching comments"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to split data"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of entries to read"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum bytes to read"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "File name to read"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex matching comments"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex to split data"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of entries to read"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum bytes to read"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg READTCP_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Host name or IP address of server socket"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Port number"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Protocol query string"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of bytes to read"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Host name or IP address of server socket"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Port number"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Protocol query string"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of bytes to read"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REGARRAY_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine array identifier"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine array identifier"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REGCMP_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Match string"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Match string"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REGEXTRACT_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Match string"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Identifier for back-references"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Match string"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Identifier for back-references"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REGISTRYVALUE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Windows registry key"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Windows registry value-id"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Windows registry key"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Windows registry value-id"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REGLINE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Filename to search"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Filename to search"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REGLIST_ARGS[] =
+ {
+-    {CF_NAKEDLRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_NAKEDLRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REGLDAP_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "URI"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Distinguished name"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Filter"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Record name"},
+-    {"subtree,onelevel,base", DATA_TYPE_OPTION, "Search scope policy"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to match results"},
+-    {"none,ssl,sasl", DATA_TYPE_OPTION, "Security level"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "URI"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Distinguished name"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Filter"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Record name"},
++    {"subtree,onelevel,base", CF_DATA_TYPE_OPTION, "Search scope policy"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex to match results"},
++    {"none,ssl,sasl", CF_DATA_TYPE_OPTION, "Security level"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REMOTESCALAR_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Variable identifier"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Hostname or IP address of server"},
+-    {CF_BOOL, DATA_TYPE_OPTION, "Use enryption"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Variable identifier"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Hostname or IP address of server"},
++    {CF_BOOL, CF_DATA_TYPE_OPTION, "Use enryption"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg HUB_KNOWLEDGE_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Variable identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Variable identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REMOTECLASSESMATCHING_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Server name or address"},
+-    {CF_BOOL, DATA_TYPE_OPTION, "Use encryption"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Return class prefix"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Server name or address"},
++    {CF_BOOL, CF_DATA_TYPE_OPTION, "Use encryption"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Return class prefix"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg RETURNSZERO_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Fully qualified command path"},
+-    {"useshell,noshell,powershell", DATA_TYPE_OPTION, "Shell encapsulation option"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Fully qualified command path"},
++    {"useshell,noshell,powershell", CF_DATA_TYPE_OPTION, "Shell encapsulation option"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg RRANGE_ARGS[] =
+ {
+-    {CF_REALRANGE, DATA_TYPE_REAL, "Real number"},
+-    {CF_REALRANGE, DATA_TYPE_REAL, "Real number"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_REALRANGE, CF_DATA_TYPE_REAL, "Real number"},
++    {CF_REALRANGE, CF_DATA_TYPE_REAL, "Real number"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SELECTSERVERS_ARGS[] =
+ {
+-    {CF_NAKEDLRANGE, DATA_TYPE_STRING, "The identifier of a cfengine list of hosts or addresses to contact"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "The port number"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "A query string"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "A regular expression to match success"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of bytes to read from server"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "Name for array of results"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_NAKEDLRANGE, CF_DATA_TYPE_STRING, "The identifier of a cfengine list of hosts or addresses to contact"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "The port number"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "A query string"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "A regular expression to match success"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of bytes to read from server"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "Name for array of results"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SPLAYCLASS_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Input string for classification"},
+-    {"daily,hourly", DATA_TYPE_OPTION, "Splay time policy"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Input string for classification"},
++    {"daily,hourly", CF_DATA_TYPE_OPTION, "Splay time policy"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SPLITSTRING_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "A data string"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to split on"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of pieces"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "A data string"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regex to split on"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of pieces"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg STRCMP_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "String"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "String"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "String"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "String"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg STRFTIME_ARGS[] =
+ {
+-    {"gmtime,localtime", DATA_TYPE_OPTION, "Use GMT or local time"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "A format string"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "The time as a Unix epoch offset"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {"gmtime,localtime", CF_DATA_TYPE_OPTION, "Use GMT or local time"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "A format string"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "The time as a Unix epoch offset"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SUBLIST_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {"head,tail", DATA_TYPE_OPTION, "Whether to return elements from the head or from the tail of the list"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of elements to return"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {"head,tail", CF_DATA_TYPE_OPTION, "Whether to return elements from the head or from the tail of the list"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Maximum number of elements to return"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg TRANSLATEPATH_ARGS[] =
+ {
+-    {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Unix style path"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ABSPATHRANGE, CF_DATA_TYPE_STRING, "Unix style path"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg USEMODULE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Name of module command"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Argument string for the module"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Name of module command"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Argument string for the module"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg UNIQUE_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg NTH_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {CF_VALRANGE, DATA_TYPE_INT, "Offset of element to return"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {CF_VALRANGE, CF_DATA_TYPE_INT, "Offset of element to return"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg EVERY_SOME_NONE_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression or string"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Regular expression or string"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg USEREXISTS_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "User name or identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "User name or identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SORT_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {"lex", DATA_TYPE_STRING, "Sorting method: lex"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {"lex", CF_DATA_TYPE_STRING, "Sorting method: lex"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg REVERSE_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SHUFFLE_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "Any seed string"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "Any seed string"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg LENGTH_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine list identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg SETOP_ARGS[] =
+ {
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine base list identifier"},
+-    {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine filter list identifier"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine base list identifier"},
++    {CF_IDRANGE, CF_DATA_TYPE_STRING, "CFEngine filter list identifier"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ FnCallArg FORMAT_ARGS[] =
+ {
+-    {CF_ANYSTRING, DATA_TYPE_STRING, "CFEngine format string"},
+-    {NULL, DATA_TYPE_NONE, NULL}
++    {CF_ANYSTRING, CF_DATA_TYPE_STRING, "CFEngine format string"},
++    {NULL, CF_DATA_TYPE_NONE, NULL}
+ };
+ 
+ /*********************************************************/
+@@ -5828,119 +5828,119 @@ FnCallArg FORMAT_ARGS[] =
+ 
+ const FnCallType CF_FNCALL_TYPES[] =
+ {
+-    FnCallTypeNew("accessedbefore", DATA_TYPE_CONTEXT, ACCESSEDBEFORE_ARGS, &FnCallIsAccessedBefore, "True if arg1 was accessed before arg2 (atime)", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("accumulated", DATA_TYPE_INT, ACCUM_ARGS, &FnCallAccumulatedDate, "Convert an accumulated amount of time into a system representation", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("ago", DATA_TYPE_INT, AGO_ARGS, &FnCallAgoDate, "Convert a time relative to now to an integer system representation", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("and", DATA_TYPE_STRING, AND_ARGS, &FnCallAnd, "Calculate whether all arguments evaluate to true", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("canonify", DATA_TYPE_STRING, CANONIFY_ARGS, &FnCallCanonify, "Convert an abitrary string into a legal class name", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("concat", DATA_TYPE_STRING, CONCAT_ARGS, &FnCallConcat, "Concatenate all arguments into string", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("changedbefore", DATA_TYPE_CONTEXT, CHANGEDBEFORE_ARGS, &FnCallIsChangedBefore, "True if arg1 was changed before arg2 (ctime)", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("classify", DATA_TYPE_CONTEXT, CLASSIFY_ARGS, &FnCallClassify, "True if the canonicalization of the argument is a currently defined class", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("classmatch", DATA_TYPE_CONTEXT, CLASSMATCH_ARGS, &FnCallClassMatch, "True if the regular expression matches any currently defined class", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("classesmatching", DATA_TYPE_STRING_LIST, CLASSMATCH_ARGS, &FnCallClassesMatching, "List the defined classes matching regex arg1", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("countclassesmatching", DATA_TYPE_INT, COUNTCLASSESMATCHING_ARGS, &FnCallCountClassesMatching, "Count the number of defined classes matching regex arg1", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("countlinesmatching", DATA_TYPE_INT, COUNTLINESMATCHING_ARGS, &FnCallCountLinesMatching, "Count the number of lines matching regex arg1 in file arg2", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("difference", DATA_TYPE_STRING_LIST, SETOP_ARGS, &FnCallSetop, "Returns all the unique elements of list arg1 that are not in list arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("dirname", DATA_TYPE_STRING, DIRNAME_ARGS, &FnCallDirname, "Return the parent directory name for given path", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("diskfree", DATA_TYPE_INT, DISKFREE_ARGS, &FnCallDiskFree, "Return the free space (in KB) available on the directory's current partition (0 if not found)", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("escape", DATA_TYPE_STRING, ESCAPE_ARGS, &FnCallEscape, "Escape regular expression characters in a string", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("every", DATA_TYPE_CONTEXT, EVERY_SOME_NONE_ARGS, &FnCallEverySomeNone, "True if every element in the named list matches the given regular expression", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("execresult", DATA_TYPE_STRING, EXECRESULT_ARGS, &FnCallExecResult, "Execute named command and assign output to variable", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("fileexists", DATA_TYPE_CONTEXT, FILESTAT_ARGS, &FnCallFileStat, "True if the named file can be accessed", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("filesexist", DATA_TYPE_CONTEXT, FILESEXIST_ARGS, &FnCallFileSexist, "True if the named list of files can ALL be accessed", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("filesize", DATA_TYPE_INT, FILESTAT_ARGS, &FnCallFileStat, "Returns the size in bytes of the file", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("filestat", DATA_TYPE_STRING, FILESTAT_DETAIL_ARGS, &FnCallFileStatDetails, "Returns stat() details of the file", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("filter", DATA_TYPE_STRING_LIST, FILTER_ARGS, &FnCallFilter, "Similarly to grep(), filter the list arg2 for matches to arg2.  The matching can be as a regular expression or exactly depending on arg3.  The matching can be inverted with arg4.  A maximum on the number of matches returned can be set with arg5.", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("format", DATA_TYPE_STRING, FORMAT_ARGS, &FnCallFormat, "Applies a list of string values in arg2,arg3... to a string format in arg1 with sprintf() rules", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+-    FnCallTypeNew("getenv", DATA_TYPE_STRING, GETENV_ARGS, &FnCallGetEnv, "Return the environment variable named arg1, truncated at arg2 characters", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),

@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the devel mailing list