SF.net SVN: gar:[22758] csw/mgar/pkg/cfengine3/trunk
guengel at users.sourceforge.net
guengel at users.sourceforge.net
Fri Dec 27 16:18:54 CET 2013
Revision: 22758
http://sourceforge.net/p/gar/code/22758
Author: guengel
Date: 2013-12-27 15:18:49 +0000 (Fri, 27 Dec 2013)
Log Message:
-----------
Again, had to fix DATA_TYPE_STRING issue, still in CFEngine 3.5.3, although bug https://cfengine.com/dev/issues/3472 has been closed.
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-Make-it-compile-under-solaris-11.patch
Modified: csw/mgar/pkg/cfengine3/trunk/Makefile
===================================================================
--- csw/mgar/pkg/cfengine3/trunk/Makefile 2013-12-27 10:07:26 UTC (rev 22757)
+++ csw/mgar/pkg/cfengine3/trunk/Makefile 2013-12-27 15:18:49 UTC (rev 22758)
@@ -40,6 +40,7 @@
PATCHFILES += 0000-Disable-acceptance-test.patch
PATCHFILES += 0002-Add-z-interpose-to-evalfunction_test-and-set_domainn.patch
+PATCHFILES += 0003-Make-it-compile-under-solaris-11.patch
#
# CUSTOM VARIABLES
Added: csw/mgar/pkg/cfengine3/trunk/files/0003-Make-it-compile-under-solaris-11.patch
===================================================================
--- csw/mgar/pkg/cfengine3/trunk/files/0003-Make-it-compile-under-solaris-11.patch (rev 0)
+++ csw/mgar/pkg/cfengine3/trunk/files/0003-Make-it-compile-under-solaris-11.patch 2013-12-27 15:18:49 UTC (rev 22758)
@@ -0,0 +1,2557 @@
+From ae4b57fd3c073eecd9c21c0eeb59df73eddd0851 Mon Sep 17 00:00:00 2001
+From: Rafael Ostertag <raos at opencsw.org>
+Date: Fri, 27 Dec 2013 15:54:51 +0100
+Subject: [PATCH] Make it compile under solaris 11.
+
+---
+ cf-agent/cf-agent.c | 4 +-
+ 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 | 4 +-
+ cf-gendoc/manual.c | 2 +-
+ cf-monitord/verify_measurements.c | 2 +-
+ libpromises/attributes.c | 2 +-
+ libpromises/bootstrap.c | 6 +-
+ libpromises/cf3.defs.h | 4 +-
+ libpromises/conversion.c | 4 +-
+ libpromises/evalfunction.c | 466 +++++++++++++++++++-------------------
+ libpromises/expand.c | 30 +--
+ libpromises/generic_agent.c | 4 +-
+ libpromises/policy.c | 4 +-
+ libpromises/rlist.c | 4 +-
+ libpromises/scope.c | 18 +-
+ libpromises/syntax.c | 14 +-
+ libpromises/syntax.h | 4 +-
+ libpromises/sysinfo.c | 100 ++++----
+ libpromises/unix.c | 28 +--
+ libpromises/vars.c | 10 +-
+ libpromises/verify_reports.c | 2 +-
+ 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 +-
+ 37 files changed, 406 insertions(+), 406 deletions(-)
+
+diff --git a/cf-agent/cf-agent.c b/cf-agent/cf-agent.c
+index 61ca750..d969bc9 100644
+--- a/cf-agent/cf-agent.c
++++ b/cf-agent/cf-agent.c
+@@ -1311,7 +1311,7 @@ static void DefaultVarPromise(EvalContext *ctx, const Promise *pp)
+
+ switch (dt)
+ {
+- case DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING:
+ case DATA_TYPE_INT:
+ case DATA_TYPE_REAL:
+
+@@ -1327,7 +1327,7 @@ static void DefaultVarPromise(EvalContext *ctx, const Promise *pp)
+
+ break;
+
+- case DATA_TYPE_STRING_LIST:
++ case CFE_DATA_TYPE_STRING_LIST:
+ case DATA_TYPE_INT_LIST:
+ case DATA_TYPE_REAL_LIST:
+
+diff --git a/cf-agent/files_editline.c b/cf-agent/files_editline.c
+index ab8e7a7..12dcde6 100644
+--- a/cf-agent/files_editline.c
++++ b/cf-agent/files_editline.c
+@@ -114,7 +114,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, CFE_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..ef5510f 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, CFE_DATA_TYPE_STRING);
+
+ for (pass = 1; pass < CF_DONEPASSES; pass++)
+ {
+diff --git a/cf-agent/vercmp.c b/cf-agent/vercmp.c
+index ce932a5..3e32cf8 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 }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "v2" }, (Rval) { v2, RVAL_TYPE_SCALAR }, CFE_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 67e6fab..fe0471f 100644
+--- a/cf-agent/verify_environments.c
++++ b/cf-agent/verify_environments.c
+@@ -136,7 +136,7 @@ void VerifyEnvironmentsPromise(EvalContext *ctx, Promise *pp)
+ }
+
+ PromiseBanner(pp);
+- ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, DATA_TYPE_STRING);
++ ScopeNewSpecial(ctx, "this", "promiser", pp->promiser, CFE_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..b7c46d7 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, CFE_DATA_TYPE_STRING);
+
+ if (!SyntaxCheckExec(a, pp))
+ {
+diff --git a/cf-agent/verify_files.c b/cf-agent/verify_files.c
+index 8e28387..c1e556f 100644
+--- a/cf-agent/verify_files.c
++++ b/cf-agent/verify_files.c
+@@ -197,7 +197,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, CFE_DATA_TYPE_STRING);
+
+ thislock = AcquireLock(ctx, path, VUQNAME, CFSTARTTIME, a.transaction, pp, false);
+
+@@ -589,7 +589,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, CFE_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 85d0637..ef4de98 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, CFE_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..8288c56 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, CFE_DATA_TYPE_STRING);
+ }
+ }
+
+diff --git a/cf-agent/verify_packages.c b/cf-agent/verify_packages.c
+index fc8823d..38bec73 100644
+--- a/cf-agent/verify_packages.c
++++ b/cf-agent/verify_packages.c
+@@ -940,9 +940,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 }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "version" }, (Rval) { version, RVAL_TYPE_SCALAR }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, CFE_DATA_TYPE_STRING);
+
+ if ((a.packages.package_delete_convention) && (a.packages.package_policy == PACKAGE_ACTION_DELETE))
+ {
+@@ -1004,9 +1004,9 @@ static void SchedulePackageOp(EvalContext *ctx, const char *name, const char *ve
+ if ((a.packages.package_file_repositories != NULL))
+ {
+ {
+- 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 }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "version" }, (Rval) { "(.*)", RVAL_TYPE_SCALAR }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, CFE_DATA_TYPE_STRING);
+ ExpandScalar(ctx, "cf_pack_context_anyver", a.packages.package_name_convention, refAnyVer);
+
+ ScopeClear("cf_pack_context_anyver");
+@@ -1124,9 +1124,9 @@ static void SchedulePackageOp(EvalContext *ctx, const char *name, const char *ve
+ if ((a.packages.package_file_repositories != NULL))
+ {
+ {
+- 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 }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "version" }, (Rval) { "(.*)", RVAL_TYPE_SCALAR }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context_anyver", "arch" }, (Rval) { arch, RVAL_TYPE_SCALAR }, CFE_DATA_TYPE_STRING);
+ ExpandScalar(ctx, "cf_pack_context_anyver", a.packages.package_name_convention, refAnyVer);
+
+ ScopeClear("cf_pack_context_anyver");
+@@ -1189,9 +1189,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 }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "version" }, (Rval) { instVer, RVAL_TYPE_SCALAR }, CFE_DATA_TYPE_STRING);
++ EvalContextVariablePut(ctx, (VarRef) { NULL, "cf_pack_context", "arch" }, (Rval) { instArch, RVAL_TYPE_SCALAR }, CFE_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..700f0d8 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, CFE_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..613136e 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, CFE_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", CFE_DATA_TYPE_STRING);
+ break;
+
+ case SERVICE_POLICY_RESTART:
+- ScopeNewSpecial(ctx, "this", "service_policy", "restart", DATA_TYPE_STRING);
++ ScopeNewSpecial(ctx, "this", "service_policy", "restart", CFE_DATA_TYPE_STRING);
+ break;
+
+ case SERVICE_POLICY_RELOAD:
+- ScopeNewSpecial(ctx, "this", "service_policy", "reload", DATA_TYPE_STRING);
++ ScopeNewSpecial(ctx, "this", "service_policy", "reload", CFE_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", CFE_DATA_TYPE_STRING);
+ break;
+ }
+
+diff --git a/cf-execd/cf-execd.c b/cf-execd/cf-execd.c
+index 7f25dc2..0ac4cb1 100644
+--- a/cf-execd/cf-execd.c
++++ b/cf-execd/cf-execd.c
+@@ -553,7 +553,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, CFE_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..1e8463c 100644
+--- a/cf-gendoc/export_xml.c
++++ b/cf-gendoc/export_xml.c
+@@ -454,8 +454,8 @@ static void XmlExportType(Writer *writer, const ConstraintSyntax *constraint_syn
+ break;
+ }
+
+- case DATA_TYPE_STRING:
+- case DATA_TYPE_STRING_LIST:
++ case CFE_DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING_LIST:
+ case DATA_TYPE_CONTEXT:
+ case DATA_TYPE_CONTEXT_LIST:
+ /* XML ELEMENT -- ACCEPTED-VALUES */
+diff --git a/cf-gendoc/manual.c b/cf-gendoc/manual.c
+index f1096ee..18cca16 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", CFE_DATA_TYPE_STRING);
+
+ ScopePutMatch(0, "x");
+
+diff --git a/cf-monitord/verify_measurements.c b/cf-monitord/verify_measurements.c
+index 1c35a16..6ee995c 100644
+--- a/cf-monitord/verify_measurements.c
++++ b/cf-monitord/verify_measurements.c
+@@ -98,7 +98,7 @@ static bool CheckMeasureSanity(Measurement m, Promise *pp)
+ switch (m.data_type)
+ {
+ case DATA_TYPE_COUNTER:
+- case DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING:
+ case DATA_TYPE_INT:
+ case DATA_TYPE_REAL:
+ break;
+diff --git a/libpromises/attributes.c b/libpromises/attributes.c
+index 3b8e1f4..8c95b14 100644
+--- a/libpromises/attributes.c
++++ b/libpromises/attributes.c
+@@ -1608,7 +1608,7 @@ Measurement GetMeasurementConstraint(const EvalContext *ctx, const Promise *pp)
+
+ if (m.data_type == DATA_TYPE_NONE)
+ {
+- m.data_type = DATA_TYPE_STRING;
++ m.data_type = CFE_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 0cd27f1..c6dbe3f 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, CFE_DATA_TYPE_STRING);
+ }
+ else
+ {
+ POLICY_SERVER[0] = '\0';
+- ScopeNewSpecial(ctx, "sys", "policy_hub", "undefined", DATA_TYPE_STRING);
++ ScopeNewSpecial(ctx, "sys", "policy_hub", "undefined", CFE_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, CFE_DATA_TYPE_STRING);
+ }
+
+ static char *PolicyServerFilename(const char *workdir)
+diff --git a/libpromises/cf3.defs.h b/libpromises/cf3.defs.h
+index c04c2a1..db6c565 100644
+--- a/libpromises/cf3.defs.h
++++ b/libpromises/cf3.defs.h
+@@ -428,10 +428,10 @@ typedef struct FnCall_ FnCall;
+
+ typedef enum
+ {
+- DATA_TYPE_STRING,
++ CFE_DATA_TYPE_STRING,
+ DATA_TYPE_INT,
+ DATA_TYPE_REAL,
+- DATA_TYPE_STRING_LIST,
++ CFE_DATA_TYPE_STRING_LIST,
+ DATA_TYPE_INT_LIST,
+ DATA_TYPE_REAL_LIST,
+ DATA_TYPE_OPTION,
+diff --git a/libpromises/conversion.c b/libpromises/conversion.c
+index 4c4b7c6..81a8fe7 100644
+--- a/libpromises/conversion.c
++++ b/libpromises/conversion.c
+@@ -274,10 +274,10 @@ FileComparator FileComparatorFromString(const char *s)
+
+ static const char *datatype_strings[] =
+ {
+- [DATA_TYPE_STRING] = "string",
++ [CFE_DATA_TYPE_STRING] = "string",
+ [DATA_TYPE_INT] = "int",
+ [DATA_TYPE_REAL] = "real",
+- [DATA_TYPE_STRING_LIST] = "slist",
++ [CFE_DATA_TYPE_STRING_LIST] = "slist",
+ [DATA_TYPE_INT_LIST] = "ilist",
+ [DATA_TYPE_REAL_LIST] = "rlist",
+ [DATA_TYPE_OPTION] = "option",
+diff --git a/libpromises/evalfunction.c b/libpromises/evalfunction.c
+index e714fec..e18970a 100644
+--- a/libpromises/evalfunction.c
++++ b/libpromises/evalfunction.c
+@@ -228,7 +228,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}, CFE_DATA_TYPE_STRING, "", 1);
+ if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+ {
+ FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -635,7 +635,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}, CFE_DATA_TYPE_STRING, "", 1);
+ if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+ {
+ FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -684,7 +684,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}, CFE_DATA_TYPE_STRING, "", 1);
+ if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+ {
+ FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -1611,7 +1611,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 }, CFE_DATA_TYPE_STRING);
+ Log(LOG_LEVEL_VERBOSE, "getfields: defining '%s' => '%s'", name, RlistScalarValue(rp));
+ vcount++;
+ }
+@@ -1795,12 +1795,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, CFE_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, CFE_DATA_TYPE_STRING);
+ ExpandScalar(ctx, PromiseGetBundle(fp->caller)->name, map, expbuf);
+
+ if (strstr(expbuf, "$(this.k)") || strstr(expbuf, "${this.k}") ||
+@@ -1819,7 +1819,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, CFE_DATA_TYPE_STRING);
+ ExpandScalar(ctx, PromiseGetBundle(fp->caller)->name, map, expbuf);
+
+ if (strstr(expbuf, "$(this.k)") || strstr(expbuf, "${this.k}") ||
+@@ -1903,7 +1903,7 @@ static FnCallResult FnCallMapList(EvalContext *ctx, FnCall *fp, Rlist *finalargs
+ return (FnCallResult) { FNCALL_FAILURE };
+ }
+
+- if (retype != DATA_TYPE_STRING_LIST && retype != DATA_TYPE_INT_LIST && retype != DATA_TYPE_REAL_LIST)
++ if (retype != CFE_DATA_TYPE_STRING_LIST && retype != DATA_TYPE_INT_LIST && retype != DATA_TYPE_REAL_LIST)
+ {
+ return (FnCallResult) { FNCALL_FAILURE };
+ }
+@@ -1911,7 +1911,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, CFE_DATA_TYPE_STRING);
+
+ ExpandScalar(ctx, "this", map, expbuf);
+
+@@ -2051,7 +2051,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 }, CFE_DATA_TYPE_STRING);
+ count++;
+ }
+ }
+@@ -2059,7 +2059,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 }, CFE_DATA_TYPE_STRING);
+
+ if (IsDefinedClass(ctx, CanonifyName(rp->item), PromiseGetNamespace(fp->caller)))
+ {
+@@ -2099,7 +2099,7 @@ static FnCallResult FnCallShuffle(EvalContext *ctx, FnCall *fp, Rlist *finalargs
+ return (FnCallResult) { FNCALL_FAILURE };
+ }
+
+- if (list_dtype != DATA_TYPE_STRING_LIST)
++ if (list_dtype != CFE_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 };
+@@ -2727,7 +2727,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 != CFE_DATA_TYPE_STRING_LIST)
+ {
+ return (FnCallResult) { FNCALL_FAILURE };
+ }
+@@ -2748,7 +2748,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}, CFE_DATA_TYPE_STRING, "", 1);
+ if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+ {
+ FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -3549,7 +3549,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, CFE_DATA_TYPE_STRING);
+ }
+ }
+ }
+@@ -3766,7 +3766,7 @@ static FnCallResult FnCallReverse(EvalContext *ctx, FnCall *fp, Rlist *finalargs
+ return (FnCallResult) { FNCALL_FAILURE };
+ }
+
+- if (list_dtype != DATA_TYPE_STRING_LIST)
++ if (list_dtype != CFE_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 };
+@@ -3836,7 +3836,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}, CFE_DATA_TYPE_STRING, "", 1);
+ if (err != SYNTAX_TYPE_MATCH_OK && err != SYNTAX_TYPE_MATCH_ERROR_UNEXPANDED)
+ {
+ FatalError(ctx, "in %s: %s", id, SyntaxTypeMatchToString(err));
+@@ -4116,7 +4116,7 @@ static FnCallResult ReadList(EvalContext *ctx, FnCall *fp, Rlist *finalargs, Dat
+
+ switch (type)
+ {
+- case DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING:
+ break;
+
+ case DATA_TYPE_INT:
+@@ -4163,7 +4163,7 @@ 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, CFE_DATA_TYPE_STRING);
+ }
+
+ static FnCallResult FnCallReadIntList(EvalContext *ctx, FnCall *fp, Rlist *args)
+@@ -4228,7 +4228,7 @@ static FnCallResult ReadArray(EvalContext *ctx, FnCall *fp, Rlist *finalargs, Da
+
+ switch (type)
+ {
+- case DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING:
+ case DATA_TYPE_INT:
+ case DATA_TYPE_REAL:
+ break;
+@@ -4249,14 +4249,14 @@ 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, CFE_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, CFE_DATA_TYPE_STRING, true);
+ }
+
+ /*********************************************************************/
+@@ -4327,7 +4327,7 @@ static FnCallResult ParseArray(EvalContext *ctx, FnCall *fp, Rlist *finalargs, D
+
+ switch (type)
+ {
+- case DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING:
+ case DATA_TYPE_INT:
+ case DATA_TYPE_REAL:
+ break;
+@@ -4348,14 +4348,14 @@ 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, CFE_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, CFE_DATA_TYPE_STRING, true);
+ }
+
+ /*********************************************************************/
+@@ -4854,7 +4854,7 @@ static int BuildLineArray(EvalContext *ctx, const Bundle *bundle, char *array_lv
+
+ switch (type)
+ {
+- case DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING:
+ strncpy(this_rval, rp->item, CF_MAXVARSIZE - 1);
+ break;
+
+@@ -5028,7 +5028,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 }, CFE_DATA_TYPE_STRING);
+ }
+ break;
+
+@@ -5043,7 +5043,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 }, CFE_DATA_TYPE_STRING_LIST);
+ }
+ break;
+
+@@ -5095,8 +5095,8 @@ 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"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Newer filename"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Older filename"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+@@ -5140,26 +5140,26 @@ FnCallArg LATERTHAN_ARGS[] =
+
+ FnCallArg CANONIFY_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "String containing non-identifier characters"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "String containing non-identifier characters"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg CHANGEDBEFORE_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Newer filename"},
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Older filename"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Newer filename"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Older filename"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg CLASSIFY_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Input string"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Input string"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg CLASSMATCH_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+@@ -5170,38 +5170,38 @@ FnCallArg CONCAT_ARGS[] =
+
+ FnCallArg COUNTCLASSESMATCHING_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg COUNTLINESMATCHING_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Filename"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Filename"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg DIRNAME_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "File path"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "File path"},
+ {NULL, DATA_TYPE_NONE, NULL},
+ };
+
+ FnCallArg DISKFREE_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File system directory"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File system directory"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg ESCAPE_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "IP address or string to escape"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "IP address or string to escape"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg EXECRESULT_ARGS[] =
+ {
+- {CF_PATHRANGE, DATA_TYPE_STRING, "Fully qualified command path"},
++ {CF_PATHRANGE, CFE_DATA_TYPE_STRING, "Fully qualified command path"},
+ {"useshell,noshell,powershell", DATA_TYPE_OPTION, "Shell encapsulation option"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+@@ -5210,27 +5210,27 @@ FnCallArg EXECRESULT_ARGS[] =
+
+ FnCallArg FILESTAT_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File object name"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File object name"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg FILESTAT_DETAIL_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File object name"},
++ {CF_ABSPATHRANGE, CFE_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}
+ };
+
+ FnCallArg FILESEXIST_ARGS[] =
+ {
+- {CF_NAKEDLRANGE, DATA_TYPE_STRING, "Array identifier containing list"},
++ {CF_NAKEDLRANGE, CFE_DATA_TYPE_STRING, "Array identifier containing list"},
+ {NULL, 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_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression or string"},
++ {CF_IDRANGE, CFE_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"},
+@@ -5239,95 +5239,95 @@ FnCallArg FILTER_ARGS[] =
+
+ 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression to match line"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Filename to read"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression to split fields"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Return array name"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg GETINDICES_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine array identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine array identifier"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Comma separated list of User names"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Comma separated list of UserID numbers"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg GETENV_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "Name of environment variable"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "Name of environment variable"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of characters to read "},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg GETGID_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Group name in text"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Group name in text"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg GETUID_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "User name in text"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "User name in text"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg GREP_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg GROUPEXISTS_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Group name or identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Group name or identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg HASH_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Input text"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Input text"},
+ {"md5,sha1,sha256,sha512,sha384,crypt", DATA_TYPE_OPTION, "Hash or digest algorithm"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg HASHMATCH_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Filename to hash"},
++ {CF_ABSPATHRANGE, CFE_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"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "ASCII representation of hash for comparison"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg HOST2IP_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Host name in ascii"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Host name in ascii"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg IP2HOST_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "IP address (IPv4 or IPv6)"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "IP address (IPv4 or IPv6)"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg HOSTINNETGROUP_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Netgroup name"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Netgroup name"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg HOSTRANGE_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Hostname prefix"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Enumerated range"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Hostname prefix"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Enumerated range"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+@@ -5341,7 +5341,7 @@ FnCallArg HOSTSSEEN_ARGS[] =
+
+ FnCallArg HOSTSWITHCLASS_ARGS[] =
+ {
+- {"[a-zA-Z0-9_]+", DATA_TYPE_STRING, "Class name to look for"},
++ {"[a-zA-Z0-9_]+", CFE_DATA_TYPE_STRING, "Class name to look for"},
+ {"name,address", DATA_TYPE_OPTION, "Type of return value desired"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+@@ -5353,7 +5353,7 @@ FnCallArg IFELSE_ARGS[] =
+
+ FnCallArg IPRANGE_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "IP address range syntax"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "IP address range syntax"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+@@ -5366,51 +5366,51 @@ FnCallArg IRANGE_ARGS[] =
+
+ FnCallArg ISGREATERTHAN_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Larger string or value"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Smaller string or value"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Larger string or value"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Smaller string or value"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Smaller string or value"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Larger string or value"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg ISNEWERTHAN_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Newer file name"},
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Older file name"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Newer file name"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Older file name"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg ISVARIABLE_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "Variable identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "Variable identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg JOIN_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Join glue-string"},
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Join glue-string"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg LASTNODE_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Input string"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Link separator, e.g. /,:"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Input string"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Link separator, e.g. /,:"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Array name"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "URI"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Distinguished name"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5418,10 +5418,10 @@ FnCallArg LDAPARRAY_ARGS[] =
+
+ 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "URI"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Distinguished name"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Filter"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5429,10 +5429,10 @@ FnCallArg LDAPLIST_ARGS[] =
+
+ 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "URI"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Distinguished name"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Filter"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5440,29 +5440,29 @@ FnCallArg LDAPVALUE_ARGS[] =
+
+ 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_PATHRANGE, CFE_DATA_TYPE_STRING, "Path to base directory"},
++ {CF_ANYSTRING, CFE_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}
+ };
+
+ 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Pattern based on $(this) as original text"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "The name of the list variable to map"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Pattern based on $(this.k) and $(this.v) as original text"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "The name of the array variable to map"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg NOT_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Class value"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Class value"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+@@ -5478,13 +5478,13 @@ FnCallArg OR_ARGS[] =
+
+ FnCallArg SUM_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "A list of arbitrary real values"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "A list of arbitrary real values"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg PRODUCT_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "A list of arbitrary real values"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "A list of arbitrary real values"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+@@ -5501,24 +5501,24 @@ FnCallArg DATE_ARGS[] =
+
+ FnCallArg PEERS_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name of host list"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Comment regex pattern"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File name of host list"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Comment regex pattern"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Peer group size"},
+ {NULL, 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_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File name of host list"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Comment regex pattern"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Peer group size"},
+ {NULL, 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_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File name of host list"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Comment regex pattern"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Peer group size"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+@@ -5532,17 +5532,17 @@ FnCallArg RANDOMINT_ARGS[] =
+
+ FnCallArg READFILE_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "File name"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File name"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of bytes to read"},
+ {NULL, 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_IDRANGE, CFE_DATA_TYPE_STRING, "Array identifier to populate"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File name to read"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regex matching comments"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5550,10 +5550,10 @@ FnCallArg READSTRINGARRAY_ARGS[] =
+
+ 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_IDRANGE, CFE_DATA_TYPE_STRING, "Array identifier to populate"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "A string to parse for input data"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regex matching comments"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5561,10 +5561,10 @@ FnCallArg PARSESTRINGARRAY_ARGS[] =
+
+ 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_IDRANGE, CFE_DATA_TYPE_STRING, "Array identifier to populate"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "A string to parse for input data"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regex matching comments"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5572,10 +5572,10 @@ FnCallArg READSTRINGARRAYIDX_ARGS[] =
+
+ 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_IDRANGE, CFE_DATA_TYPE_STRING, "Array identifier to populate"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "A string to parse for input data"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regex matching comments"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5583,9 +5583,9 @@ FnCallArg PARSESTRINGARRAYIDX_ARGS[] =
+
+ 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_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "File name to read"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regex matching comments"},
++ {CF_ANYSTRING, CFE_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}
+@@ -5593,94 +5593,94 @@ FnCallArg READSTRINGLIST_ARGS[] =
+
+ FnCallArg READTCP_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Host name or IP address of server socket"},
++ {CF_ANYSTRING, CFE_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_ANYSTRING, CFE_DATA_TYPE_STRING, "Protocol query string"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of bytes to read"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg REGARRAY_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine array identifier"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine array identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg REGCMP_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Match string"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Match string"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Match string"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "Identifier for back-references"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg REGISTRYVALUE_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Windows registry key"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Windows registry value-id"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Windows registry key"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Windows registry value-id"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg REGLINE_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Filename to search"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Filename to search"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg REGLIST_ARGS[] =
+ {
+- {CF_NAKEDLRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
++ {CF_NAKEDLRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "URI"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Distinguished name"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Filter"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Record name"},
+ {"subtree,onelevel,base", DATA_TYPE_OPTION, "Search scope policy"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regex to match results"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regex to match results"},
+ {"none,ssl,sasl", DATA_TYPE_OPTION, "Security level"},
+ {NULL, 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_IDRANGE, CFE_DATA_TYPE_STRING, "Variable identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Hostname or IP address of server"},
+ {CF_BOOL, DATA_TYPE_OPTION, "Use enryption"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg HUB_KNOWLEDGE_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "Variable identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "Variable identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg REMOTECLASSESMATCHING_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Regular expression"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Server name or address"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Server name or address"},
+ {CF_BOOL, DATA_TYPE_OPTION, "Use encryption"},
+- {CF_IDRANGE, DATA_TYPE_STRING, "Return class prefix"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "Return class prefix"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg RETURNSZERO_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Fully qualified command path"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Fully qualified command path"},
+ {"useshell,noshell,powershell", DATA_TYPE_OPTION, "Shell encapsulation option"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+@@ -5694,48 +5694,48 @@ FnCallArg RRANGE_ARGS[] =
+
+ FnCallArg SELECTSERVERS_ARGS[] =
+ {
+- {CF_NAKEDLRANGE, DATA_TYPE_STRING, "The identifier of a cfengine list of hosts or addresses to contact"},
++ {CF_NAKEDLRANGE, CFE_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_ANYSTRING, CFE_DATA_TYPE_STRING, "A query string"},
++ {CF_ANYSTRING, CFE_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"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "Name for array of results"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg SPLAYCLASS_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Input string for classification"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Input string for classification"},
+ {"daily,hourly", DATA_TYPE_OPTION, "Splay time policy"},
+ {NULL, 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_ANYSTRING, CFE_DATA_TYPE_STRING, "A data string"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regex to split on"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Maximum number of pieces"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg STRCMP_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "String"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "String"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "String"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "String"},
+ {NULL, 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_ANYSTRING, CFE_DATA_TYPE_STRING, "A format string"},
+ {CF_VALRANGE, DATA_TYPE_INT, "The time as a Unix epoch offset"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg SUBLIST_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_IDRANGE, CFE_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}
+@@ -5743,79 +5743,79 @@ FnCallArg SUBLIST_ARGS[] =
+
+ FnCallArg TRANSLATEPATH_ARGS[] =
+ {
+- {CF_ABSPATHRANGE, DATA_TYPE_STRING, "Unix style path"},
++ {CF_ABSPATHRANGE, CFE_DATA_TYPE_STRING, "Unix style path"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Name of module command"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Argument string for the module"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg UNIQUE_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg NTH_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
+ {CF_VALRANGE, DATA_TYPE_INT, "Offset of element to return"},
+ {NULL, 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"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Regular expression or string"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg USEREXISTS_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "User name or identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "User name or identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg SORT_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+- {"lex", DATA_TYPE_STRING, "Sorting method: lex"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
++ {"lex", CFE_DATA_TYPE_STRING, "Sorting method: lex"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg REVERSE_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg SHUFFLE_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
+- {CF_ANYSTRING, DATA_TYPE_STRING, "Any seed string"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "Any seed string"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg LENGTH_ARGS[] =
+ {
+- {CF_IDRANGE, DATA_TYPE_STRING, "CFEngine list identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine list identifier"},
+ {NULL, 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"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine base list identifier"},
++ {CF_IDRANGE, CFE_DATA_TYPE_STRING, "CFEngine filter list identifier"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+ FnCallArg FORMAT_ARGS[] =
+ {
+- {CF_ANYSTRING, DATA_TYPE_STRING, "CFEngine format string"},
++ {CF_ANYSTRING, CFE_DATA_TYPE_STRING, "CFEngine format string"},
+ {NULL, DATA_TYPE_NONE, NULL}
+ };
+
+@@ -5830,47 +5830,47 @@ 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("and", CFE_DATA_TYPE_STRING, AND_ARGS, &FnCallAnd, "Calculate whether all arguments evaluate to true", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("canonify", CFE_DATA_TYPE_STRING, CANONIFY_ARGS, &FnCallCanonify, "Convert an abitrary string into a legal class name", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("concat", CFE_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("classesmatching", CFE_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("difference", CFE_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", CFE_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("escape", CFE_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("execresult", CFE_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),
++ FnCallTypeNew("filestat", CFE_DATA_TYPE_STRING, FILESTAT_DETAIL_ARGS, &FnCallFileStatDetails, "Returns stat() details of the file", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("filter", CFE_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", CFE_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", CFE_DATA_TYPE_STRING, GETENV_ARGS, &FnCallGetEnv, "Return the environment variable named arg1, truncated at arg2 characters", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("getfields", DATA_TYPE_INT, GETFIELDS_ARGS, &FnCallGetFields, "Get an array of fields in the lines matching regex arg1 in file arg2, split on regex arg3 as array name arg4", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("getgid", DATA_TYPE_INT, GETGID_ARGS, &FnCallGetGid, "Return the integer group id of the named group on this host", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("getindices", DATA_TYPE_STRING_LIST, GETINDICES_ARGS, &FnCallGetIndices, "Get a list of keys to the array whose id is the argument and assign to variable", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("getindices", CFE_DATA_TYPE_STRING_LIST, GETINDICES_ARGS, &FnCallGetIndices, "Get a list of keys to the array whose id is the argument and assign to variable", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("getuid", DATA_TYPE_INT, GETUID_ARGS, &FnCallGetUid, "Return the integer user id of the named user on this host", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("getusers", DATA_TYPE_STRING_LIST, GETUSERS_ARGS, &FnCallGetUsers, "Get a list of all system users defined, minus those names defined in arg1 and uids in arg2", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("getvalues", DATA_TYPE_STRING_LIST, GETINDICES_ARGS, &FnCallGetValues, "Get a list of values corresponding to the right hand sides in an array whose id is the argument and assign to variable", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("grep", DATA_TYPE_STRING_LIST, GREP_ARGS, &FnCallGrep, "Extract the sub-list if items matching the regular expression in arg1 of the list named in arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("getusers", CFE_DATA_TYPE_STRING_LIST, GETUSERS_ARGS, &FnCallGetUsers, "Get a list of all system users defined, minus those names defined in arg1 and uids in arg2", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("getvalues", CFE_DATA_TYPE_STRING_LIST, GETINDICES_ARGS, &FnCallGetValues, "Get a list of values corresponding to the right hand sides in an array whose id is the argument and assign to variable", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("grep", CFE_DATA_TYPE_STRING_LIST, GREP_ARGS, &FnCallGrep, "Extract the sub-list if items matching the regular expression in arg1 of the list named in arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("groupexists", DATA_TYPE_CONTEXT, GROUPEXISTS_ARGS, &FnCallGroupExists, "True if group or numerical id exists on this host", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("hash", DATA_TYPE_STRING, HASH_ARGS, &FnCallHash, "Return the hash of arg1, type arg2 and assign to a variable", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("hash", CFE_DATA_TYPE_STRING, HASH_ARGS, &FnCallHash, "Return the hash of arg1, type arg2 and assign to a variable", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("hashmatch", DATA_TYPE_CONTEXT, HASHMATCH_ARGS, &FnCallHashMatch, "Compute the hash of arg1, of type arg2 and test if it matches the value in arg3", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("host2ip", DATA_TYPE_STRING, HOST2IP_ARGS, &FnCallHost2IP, "Returns the primary name-service IP address for the named host", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("ip2host", DATA_TYPE_STRING, IP2HOST_ARGS, &FnCallIP2Host, "Returns the primary name-service host name for the IP address", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("host2ip", CFE_DATA_TYPE_STRING, HOST2IP_ARGS, &FnCallHost2IP, "Returns the primary name-service IP address for the named host", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("ip2host", CFE_DATA_TYPE_STRING, IP2HOST_ARGS, &FnCallIP2Host, "Returns the primary name-service host name for the IP address", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("hostinnetgroup", DATA_TYPE_CONTEXT, HOSTINNETGROUP_ARGS, &FnCallHostInNetgroup, "True if the current host is in the named netgroup", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("hostrange", DATA_TYPE_CONTEXT, HOSTRANGE_ARGS, &FnCallHostRange, "True if the current host lies in the range of enumerated hostnames specified", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("hostsseen", DATA_TYPE_STRING_LIST, HOSTSSEEN_ARGS, &FnCallHostsSeen, "Extract the list of hosts last seen/not seen within the last arg1 hours", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("hostswithclass", DATA_TYPE_STRING_LIST, HOSTSWITHCLASS_ARGS, &FnCallHostsWithClass, "Extract the list of hosts with the given class set from the hub database (enterprise extension)", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("hubknowledge", DATA_TYPE_STRING, HUB_KNOWLEDGE_ARGS, &FnCallHubKnowledge, "Read global knowledge from the hub host by id (enterprise extension)", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("ifelse", DATA_TYPE_STRING, IFELSE_ARGS, &FnCallIfElse, "Do If-ElseIf-ElseIf-...-Else evaluation of arguments", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("intersection", DATA_TYPE_STRING_LIST, SETOP_ARGS, &FnCallSetop, "Returns all the unique elements of list arg1 that are also in list arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("hostsseen", CFE_DATA_TYPE_STRING_LIST, HOSTSSEEN_ARGS, &FnCallHostsSeen, "Extract the list of hosts last seen/not seen within the last arg1 hours", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("hostswithclass", CFE_DATA_TYPE_STRING_LIST, HOSTSWITHCLASS_ARGS, &FnCallHostsWithClass, "Extract the list of hosts with the given class set from the hub database (enterprise extension)", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("hubknowledge", CFE_DATA_TYPE_STRING, HUB_KNOWLEDGE_ARGS, &FnCallHubKnowledge, "Read global knowledge from the hub host by id (enterprise extension)", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("ifelse", CFE_DATA_TYPE_STRING, IFELSE_ARGS, &FnCallIfElse, "Do If-ElseIf-ElseIf-...-Else evaluation of arguments", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("intersection", CFE_DATA_TYPE_STRING_LIST, SETOP_ARGS, &FnCallSetop, "Returns all the unique elements of list arg1 that are also in list arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("iprange", DATA_TYPE_CONTEXT, IPRANGE_ARGS, &FnCallIPRange, "True if the current host lies in the range of IP addresses specified", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("irange", DATA_TYPE_INT_RANGE, IRANGE_ARGS, &FnCallIRange, "Define a range of integer values for cfengine internal use", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("isdir", DATA_TYPE_CONTEXT, FILESTAT_ARGS, &FnCallFileStat, "True if the named object is a directory", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+@@ -5881,64 +5881,64 @@ const FnCallType CF_FNCALL_TYPES[] =
+ FnCallTypeNew("isnewerthan", DATA_TYPE_CONTEXT, ISNEWERTHAN_ARGS, &FnCallIsNewerThan, "True if arg1 is newer (modified later) than arg2 (mtime)", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("isplain", DATA_TYPE_CONTEXT, FILESTAT_ARGS, &FnCallFileStat, "True if the named object is a plain/regular file", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("isvariable", DATA_TYPE_CONTEXT, ISVARIABLE_ARGS, &FnCallIsVariable, "True if the named variable is defined", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("join", DATA_TYPE_STRING, JOIN_ARGS, &FnCallJoin, "Join the items of arg2 into a string, using the conjunction in arg1", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("lastnode", DATA_TYPE_STRING, LASTNODE_ARGS, &FnCallLastNode, "Extract the last of a separated string, e.g. filename from a path", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("join", CFE_DATA_TYPE_STRING, JOIN_ARGS, &FnCallJoin, "Join the items of arg2 into a string, using the conjunction in arg1", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("lastnode", CFE_DATA_TYPE_STRING, LASTNODE_ARGS, &FnCallLastNode, "Extract the last of a separated string, e.g. filename from a path", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("laterthan", DATA_TYPE_CONTEXT, LATERTHAN_ARGS, &FnCallLaterThan, "True if the current time is later than the given date", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("ldaparray", DATA_TYPE_CONTEXT, LDAPARRAY_ARGS, &FnCallLDAPArray, "Extract all values from an ldap record", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("ldaplist", DATA_TYPE_STRING_LIST, LDAPLIST_ARGS, &FnCallLDAPList, "Extract all named values from multiple ldap records", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("ldapvalue", DATA_TYPE_STRING, LDAPVALUE_ARGS, &FnCallLDAPValue, "Extract the first matching named value from ldap", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("ldaplist", CFE_DATA_TYPE_STRING_LIST, LDAPLIST_ARGS, &FnCallLDAPList, "Extract all named values from multiple ldap records", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("ldapvalue", CFE_DATA_TYPE_STRING, LDAPVALUE_ARGS, &FnCallLDAPValue, "Extract the first matching named value from ldap", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("length", DATA_TYPE_INT, LENGTH_ARGS, &FnCallLength, "Return the length of a list", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("lsdir", DATA_TYPE_STRING_LIST, LSDIRLIST_ARGS, &FnCallLsDir, "Return a list of files in a directory matching a regular expression", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("maparray", DATA_TYPE_STRING_LIST, MAPARRAY_ARGS, &FnCallMapArray, "Return a list with each element modified by a pattern based $(this.k) and $(this.v)", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("maplist", DATA_TYPE_STRING_LIST, MAPLIST_ARGS, &FnCallMapList, "Return a list with each element modified by a pattern based $(this)", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("lsdir", CFE_DATA_TYPE_STRING_LIST, LSDIRLIST_ARGS, &FnCallLsDir, "Return a list of files in a directory matching a regular expression", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("maparray", CFE_DATA_TYPE_STRING_LIST, MAPARRAY_ARGS, &FnCallMapArray, "Return a list with each element modified by a pattern based $(this.k) and $(this.v)", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("maplist", CFE_DATA_TYPE_STRING_LIST, MAPLIST_ARGS, &FnCallMapList, "Return a list with each element modified by a pattern based $(this)", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("none", DATA_TYPE_CONTEXT, EVERY_SOME_NONE_ARGS, &FnCallEverySomeNone, "True if no element in the named list matches the given regular expression", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("not", DATA_TYPE_STRING, NOT_ARGS, &FnCallNot, "Calculate whether argument is false", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("not", CFE_DATA_TYPE_STRING, NOT_ARGS, &FnCallNot, "Calculate whether argument is false", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("now", DATA_TYPE_INT, NOW_ARGS, &FnCallNow, "Convert the current time into system representation", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("nth", DATA_TYPE_STRING, NTH_ARGS, &FnCallNth, "Get the element at arg2 in list arg1", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("nth", CFE_DATA_TYPE_STRING, NTH_ARGS, &FnCallNth, "Get the element at arg2 in list arg1", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("on", DATA_TYPE_INT, DATE_ARGS, &FnCallOn, "Convert an exact date/time to an integer system representation", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("or", DATA_TYPE_STRING, OR_ARGS, &FnCallOr, "Calculate whether any argument evaluates to true", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("or", CFE_DATA_TYPE_STRING, OR_ARGS, &FnCallOr, "Calculate whether any argument evaluates to true", true, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("parseintarray", DATA_TYPE_INT, PARSESTRINGARRAY_ARGS, &FnCallParseIntArray, "Read an array of integers from a file and assign the dimension to a variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("parserealarray", DATA_TYPE_INT, PARSESTRINGARRAY_ARGS, &FnCallParseRealArray, "Read an array of real numbers from a file and assign the dimension to a variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("parsestringarray", DATA_TYPE_INT, PARSESTRINGARRAY_ARGS, &FnCallParseStringArray, "Read an array of strings from a file and assign the dimension to a variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("parsestringarrayidx", DATA_TYPE_INT, PARSESTRINGARRAYIDX_ARGS, &FnCallParseStringArrayIndex, "Read an array of strings from a file and assign the dimension to a variable with integer indeces", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("peers", DATA_TYPE_STRING_LIST, PEERS_ARGS, &FnCallPeers, "Get a list of peers (not including ourself) from the partition to which we belong", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("peerleader", DATA_TYPE_STRING, PEERLEADER_ARGS, &FnCallPeerLeader, "Get the assigned peer-leader of the partition to which we belong", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("peerleaders", DATA_TYPE_STRING_LIST, PEERLEADERS_ARGS, &FnCallPeerLeaders, "Get a list of peer leaders from the named partitioning", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("peers", CFE_DATA_TYPE_STRING_LIST, PEERS_ARGS, &FnCallPeers, "Get a list of peers (not including ourself) from the partition to which we belong", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("peerleader", CFE_DATA_TYPE_STRING, PEERLEADER_ARGS, &FnCallPeerLeader, "Get the assigned peer-leader of the partition to which we belong", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("peerleaders", CFE_DATA_TYPE_STRING_LIST, PEERLEADERS_ARGS, &FnCallPeerLeaders, "Get a list of peer leaders from the named partitioning", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("product", DATA_TYPE_REAL, PRODUCT_ARGS, &FnCallProduct, "Return the product of a list of reals", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("randomint", DATA_TYPE_INT, RANDOMINT_ARGS, &FnCallRandomInt, "Generate a random integer between the given limits", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("readfile", DATA_TYPE_STRING, READFILE_ARGS, &FnCallReadFile, "Read max number of bytes from named file and assign to variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("readfile", CFE_DATA_TYPE_STRING, READFILE_ARGS, &FnCallReadFile, "Read max number of bytes from named file and assign to variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("readintarray", DATA_TYPE_INT, READSTRINGARRAY_ARGS, &FnCallReadIntArray, "Read an array of integers from a file and assign the dimension to a variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("readintlist", DATA_TYPE_INT_LIST, READSTRINGLIST_ARGS, &FnCallReadIntList, "Read and assign a list variable from a file of separated ints", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("readrealarray", DATA_TYPE_INT, READSTRINGARRAY_ARGS, &FnCallReadRealArray, "Read an array of real numbers from a file and assign the dimension to a variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("readreallist", DATA_TYPE_REAL_LIST, READSTRINGLIST_ARGS, &FnCallReadRealList, "Read and assign a list variable from a file of separated real numbers", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("readstringarray", DATA_TYPE_INT, READSTRINGARRAY_ARGS, &FnCallReadStringArray, "Read an array of strings from a file and assign the dimension to a variable", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("readstringarrayidx", DATA_TYPE_INT, READSTRINGARRAYIDX_ARGS, &FnCallReadStringArrayIndex, "Read an array of strings from a file and assign the dimension to a variable with integer indeces", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("readstringlist", DATA_TYPE_STRING_LIST, READSTRINGLIST_ARGS, &FnCallReadStringList, "Read and assign a list variable from a file of separated strings", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("readtcp", DATA_TYPE_STRING, READTCP_ARGS, &FnCallReadTcp, "Connect to tcp port, send string and assign result to variable", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("readstringlist", CFE_DATA_TYPE_STRING_LIST, READSTRINGLIST_ARGS, &FnCallReadStringList, "Read and assign a list variable from a file of separated strings", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("readtcp", CFE_DATA_TYPE_STRING, READTCP_ARGS, &FnCallReadTcp, "Connect to tcp port, send string and assign result to variable", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("regarray", DATA_TYPE_CONTEXT, REGARRAY_ARGS, &FnCallRegArray, "True if arg1 matches any item in the associative array with id=arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("regcmp", DATA_TYPE_CONTEXT, REGCMP_ARGS, &FnCallRegCmp, "True if arg1 is a regular expression matching that matches string arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("regextract", DATA_TYPE_CONTEXT, REGEXTRACT_ARGS, &FnCallRegExtract, "True if the regular expression in arg 1 matches the string in arg2 and sets a non-empty array of backreferences named arg3", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("registryvalue", DATA_TYPE_STRING, REGISTRYVALUE_ARGS, &FnCallRegistryValue, "Returns a value for an MS-Win registry key,value pair", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("registryvalue", CFE_DATA_TYPE_STRING, REGISTRYVALUE_ARGS, &FnCallRegistryValue, "Returns a value for an MS-Win registry key,value pair", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("regline", DATA_TYPE_CONTEXT, REGLINE_ARGS, &FnCallRegLine, "True if the regular expression in arg1 matches a line in file arg2", false, FNCALL_CATEGORY_IO, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("reglist", DATA_TYPE_CONTEXT, REGLIST_ARGS, &FnCallRegList, "True if the regular expression in arg2 matches any item in the list whose id is arg1", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("regldap", DATA_TYPE_CONTEXT, REGLDAP_ARGS, &FnCallRegLDAP, "True if the regular expression in arg6 matches a value item in an ldap search", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("remotescalar", DATA_TYPE_STRING, REMOTESCALAR_ARGS, &FnCallRemoteScalar, "Read a scalar value from a remote cfengine server", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("remotescalar", CFE_DATA_TYPE_STRING, REMOTESCALAR_ARGS, &FnCallRemoteScalar, "Read a scalar value from a remote cfengine server", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("remoteclassesmatching", DATA_TYPE_CONTEXT, REMOTECLASSESMATCHING_ARGS, &FnCallRemoteClassesMatching, "Read persistent classes matching a regular expression from a remote cfengine server and add them into local context with prefix", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("returnszero", DATA_TYPE_CONTEXT, RETURNSZERO_ARGS, &FnCallReturnsZero, "True if named shell command has exit status zero", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("rrange", DATA_TYPE_REAL_RANGE, RRANGE_ARGS, &FnCallRRange, "Define a range of real numbers for cfengine internal use", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("reverse", DATA_TYPE_STRING_LIST, REVERSE_ARGS, &FnCallReverse, "Reverse a string list", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("reverse", CFE_DATA_TYPE_STRING_LIST, REVERSE_ARGS, &FnCallReverse, "Reverse a string list", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("selectservers", DATA_TYPE_INT, SELECTSERVERS_ARGS, &FnCallSelectServers, "Select tcp servers which respond correctly to a query and return their number, set array of names", false, FNCALL_CATEGORY_COMM, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("shuffle", DATA_TYPE_STRING_LIST, SHUFFLE_ARGS, &FnCallShuffle, "Shuffle a string list", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("shuffle", CFE_DATA_TYPE_STRING_LIST, SHUFFLE_ARGS, &FnCallShuffle, "Shuffle a string list", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("some", DATA_TYPE_CONTEXT, EVERY_SOME_NONE_ARGS, &FnCallEverySomeNone, "True if an element in the named list matches the given regular expression", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("sort", DATA_TYPE_STRING_LIST, SORT_ARGS, &FnCallSort, "Sort a string list", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("sort", CFE_DATA_TYPE_STRING_LIST, SORT_ARGS, &FnCallSort, "Sort a string list", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("splayclass", DATA_TYPE_CONTEXT, SPLAYCLASS_ARGS, &FnCallSplayClass, "True if the first argument's time-slot has arrived, according to a policy in arg2", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("splitstring", DATA_TYPE_STRING_LIST, SPLITSTRING_ARGS, &FnCallSplitString, "Convert a string in arg1 into a list of max arg3 strings by splitting on a regular expression in arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("splitstring", CFE_DATA_TYPE_STRING_LIST, SPLITSTRING_ARGS, &FnCallSplitString, "Convert a string in arg1 into a list of max arg3 strings by splitting on a regular expression in arg2", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("strcmp", DATA_TYPE_CONTEXT, STRCMP_ARGS, &FnCallStrCmp, "True if the two strings match exactly", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("strftime", DATA_TYPE_STRING, STRFTIME_ARGS, &FnCallStrftime, "Format a date and time string", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("sublist", DATA_TYPE_STRING_LIST, SUBLIST_ARGS, &FnCallSublist, "Returns arg3 element from either the head or the tail (according to arg2) of list arg1.", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("strftime", CFE_DATA_TYPE_STRING, STRFTIME_ARGS, &FnCallStrftime, "Format a date and time string", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("sublist", CFE_DATA_TYPE_STRING_LIST, SUBLIST_ARGS, &FnCallSublist, "Returns arg3 element from either the head or the tail (according to arg2) of list arg1.", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("sum", DATA_TYPE_REAL, SUM_ARGS, &FnCallSum, "Return the sum of a list of reals", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("translatepath", DATA_TYPE_STRING, TRANSLATEPATH_ARGS, &FnCallTranslatePath, "Translate path separators from Unix style to the host's native", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
+- FnCallTypeNew("unique", DATA_TYPE_STRING_LIST, UNIQUE_ARGS, &FnCallUnique, "Returns all the unique elements of list arg1", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("translatepath", CFE_DATA_TYPE_STRING, TRANSLATEPATH_ARGS, &FnCallTranslatePath, "Translate path separators from Unix style to the host's native", false, FNCALL_CATEGORY_FILES, SYNTAX_STATUS_NORMAL),
++ FnCallTypeNew("unique", CFE_DATA_TYPE_STRING_LIST, UNIQUE_ARGS, &FnCallUnique, "Returns all the unique elements of list arg1", false, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("usemodule", DATA_TYPE_CONTEXT, USEMODULE_ARGS, &FnCallUseModule, "Execute cfengine module script and set class if successful", false, FNCALL_CATEGORY_UTILS, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNew("userexists", DATA_TYPE_CONTEXT, USEREXISTS_ARGS, &FnCallUserExists, "True if user name or numerical id exists on this host", false, FNCALL_CATEGORY_SYSTEM, SYNTAX_STATUS_NORMAL),
+ FnCallTypeNewNull()
+diff --git a/libpromises/expand.c b/libpromises/expand.c
+index 4df3e84..7981e12 100644
+--- a/libpromises/expand.c
++++ b/libpromises/expand.c
+@@ -652,7 +652,7 @@ bool ExpandScalar(const EvalContext *ctx, const char *scopeid, const char *strin
+ {
+ switch (type)
+ {
+- case DATA_TYPE_STRING:
++ case CFE_DATA_TYPE_STRING:
+ case DATA_TYPE_INT:
+ case DATA_TYPE_REAL:
+
+@@ -664,7 +664,7 @@ bool ExpandScalar(const EvalContext *ctx, const char *scopeid, const char *strin
+ strlcat(buffer, (char *) rval.item, CF_EXPANDSIZE);
+ break;
+
+- case DATA_TYPE_STRING_LIST:
++ case CFE_DATA_TYPE_STRING_LIST:
+ case DATA_TYPE_INT_LIST:
+ case DATA_TYPE_REAL_LIST:
+ case DATA_TYPE_NONE:
@@ 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