Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions libpromises/evalfunction.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
#include <compiler.h>
#include <rlist.h>
#include <acl_tools.h>
#include <date_parser.h>

#ifdef HAVE_LIBCURL
#include <curl/curl.h>
Expand Down Expand Up @@ -7615,6 +7616,21 @@ static FnCallResult FnCallStrftime(ARG_UNUSED EvalContext *ctx,

/*********************************************************************/

static FnCallResult FnCallStrToTime(ARG_UNUSED EvalContext *ctx, ARG_UNUSED const Policy *policy, const FnCall *fp, const Rlist *finalargs)
{
char *string = RlistScalarValue(finalargs);
time_t out;

if (StringToTime(string, &out) != 0)
{
Log(LOG_LEVEL_ERR, "'%s': Invalid date '%s'", fp->name, string);
return FnFailure();
}
return FnReturnF("%ld", out);
}

/*********************************************************************/

static FnCallResult FnCallEval(EvalContext *ctx, ARG_UNUSED const Policy *policy, const FnCall *fp, const Rlist *finalargs)
{
if (finalargs == NULL)
Expand Down Expand Up @@ -11269,6 +11285,12 @@ static const FnCallArg STRFTIME_ARGS[] =
{NULL, CF_DATA_TYPE_NONE, NULL}
};

static const FnCallArg STRTOTIME_ARGS[] =
{
{CF_ANYSTRING, CF_DATA_TYPE_STRING, "String to parse"},
{NULL, CF_DATA_TYPE_NONE, NULL}
};

static const FnCallArg STRING_REPLACE_ARGS[] =
{
{CF_ANYSTRING, CF_DATA_TYPE_STRING, "Source string"},
Expand Down Expand Up @@ -11840,6 +11862,8 @@ const FnCallType CF_FNCALL_TYPES[] =
FNCALL_OPTION_NONE, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL, DEFAULT_ARGC),
FnCallTypeNew("strftime", CF_DATA_TYPE_STRING, STRFTIME_ARGS, &FnCallStrftime, "Format a date and time string",
FNCALL_OPTION_NONE, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL, DEFAULT_ARGC),
FnCallTypeNew("strtotime", CF_DATA_TYPE_INT, STRTOTIME_ARGS, &FnCallStrToTime, "Parse a timestamp from a string",
FNCALL_OPTION_NONE, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL, DEFAULT_ARGC),
FnCallTypeNew("sublist", CF_DATA_TYPE_STRING_LIST, SUBLIST_ARGS, &FnCallSublist, "Returns arg3 element from either the head or the tail (according to arg2) of list or array or data container arg1.",
FNCALL_OPTION_COLLECTING, FNCALL_CATEGORY_DATA, SYNTAX_STATUS_NORMAL, DEFAULT_ARGC),
FnCallTypeNew("sysctlvalue", CF_DATA_TYPE_STRING, SYSCTLVALUE_ARGS, &FnCallSysctlValue, "Returns a value for sysctl key arg1 pair",
Expand Down
Loading