OpenVAS Libraries  8.0.3
Macros | Typedefs | Functions
nasl_isotime.c File Reference

Implementation of an API for ISOTIME values. More...

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <ctype.h>
#include <time.h>
#include <glib.h>
#include <glib/gstdio.h>
#include "nasl_tree.h"
#include "nasl_global_ctxt.h"
#include "nasl_var.h"
#include "nasl_lex_ctxt.h"
#include "nasl_debug.h"
#include "nasl_isotime.h"

Macros

#define DIM(v)   (sizeof(v)/sizeof((v)[0]))
 
#define DIMof(type, member)   DIM(((type *)0)->member)
 
#define ISOTIME_SIZE   16
 
#define JD_DIFF   1721060L
 
#define spacep(p)   (*(p) == ' ' || *(p) == '\t')
 
#define digitp(p)   (*(p) >= '0' && *(p) <= '9')
 
#define atoi_1(p)   (*(p) - '0' )
 
#define atoi_2(p)   ((atoi_1(p) * 10) + atoi_1((p)+1))
 
#define atoi_4(p)   ((atoi_2(p) * 100) + atoi_2((p)+2))
 

Typedefs

typedef char my_isotime_t[ISOTIME_SIZE]
 

Functions

tree_cellnasl_isotime_now (lex_ctxt *lexic)
 Return the current time in ISO format. More...
 
tree_cellnasl_isotime_is_valid (lex_ctxt *lexic)
 Check whether an ISO time string is valid. More...
 
tree_cellnasl_isotime_scan (lex_ctxt *lexic)
 Convert a string into an ISO time string. More...
 
tree_cellnasl_isotime_print (lex_ctxt *lexic)
 Convert an SIO time string into a better readable string. More...
 
tree_cellnasl_isotime_add (lex_ctxt *lexic)
 Add days or seconds to an ISO time string. More...
 

Detailed Description

Implementation of an API for ISOTIME values.

This file contains the implementation of the isotime_* NASL builtin functions.

Background:

Most 32 bit systems use a signed 32 bit time_t to represent the system time. The problem is that in 2038 this time type will overflow. However, we sometimes need to compute dates in the future; for example some certificates are (for whatever reasons) valid for 30 years. To solve this problem in a platform independent way, we represent the time as a string and provide functions to work with them. This is not an elegant solution, but all proposed new time APIs have never been implemented on main stream systems - we can't expect that this will happen any time soon.

Macro Definition Documentation

#define atoi_1 (   p)    (*(p) - '0' )
#define atoi_2 (   p)    ((atoi_1(p) * 10) + atoi_1((p)+1))
#define atoi_4 (   p)    ((atoi_2(p) * 100) + atoi_2((p)+2))
#define digitp (   p)    (*(p) >= '0' && *(p) <= '9')
#define DIM (   v)    (sizeof(v)/sizeof((v)[0]))
#define DIMof (   type,
  member 
)    DIM(((type *)0)->member)
#define ISOTIME_SIZE   16
#define JD_DIFF   1721060L
#define spacep (   p)    (*(p) == ' ' || *(p) == '\t')

Typedef Documentation

typedef char my_isotime_t[ISOTIME_SIZE]

Function Documentation

tree_cell* nasl_isotime_add ( lex_ctxt lexic)

Add days or seconds to an ISO time string.

NASL Function: isotime_add

This function adds days or seconds to an ISO time string and returns the resulting time string. The number of days or seconds are given using the named parameters; if none are given nothing is added; if both are given both additions are performed. This function won't work for dates before the Gregorian calendar switch.

NASL Unnamed Parameters:
  • An ISO time string
NASL Named Parameters:
  • years An integer with the number of years to add to the timestamp.
  • days An integer with the number of days to add to the timestamp.
  • seconds An integer with the number of seconds to add to the timestamp.
NASL Returns:
The resulting ISO time string or NULL if the provided ISO time string is not valid or the result would overflow (i.e. year > 9999).
Parameters
[in]lexicLexical context of the NASL interpreter.
Returns
A tree cell.
tree_cell* nasl_isotime_is_valid ( lex_ctxt lexic)

Check whether an ISO time string is valid.

NASL Function: isotime_is_valid
NASL Unnamed Parameters:
  • A string. Both, the standard 15 byte string and the better human readable up to 19 byte format are accepted here. If a plain data type is is provided only the 15 byte format is accepted.
NASL Returns:
True is this is an ISO string; false if not.
Parameters
[in]lexicLexical context of the NASL interpreter.
Returns
A tree cell.
tree_cell* nasl_isotime_now ( lex_ctxt lexic)

Return the current time in ISO format.

NASL Function: isotime_now
NASL Unnamed Parameters:
  • None
NASL Returns:
A string with the ISO time. If the current time is not available an empty string is returned.
Parameters
[in]lexicLexical context of the NASL interpreter.
Returns
A tree cell.
tree_cell* nasl_isotime_print ( lex_ctxt lexic)

Convert an SIO time string into a better readable string.

NASL Function: isotime_print
NASL Unnamed Parameters:
  • An ISO time string.
NASL Returns:
A string in the format "YYYY-MM-DD HH:MM:SS" or "[none]" if the provided time string is not valid.
Parameters
[in]lexicLexical context of the NASL interpreter.
Returns
A tree cell.
tree_cell* nasl_isotime_scan ( lex_ctxt lexic)

Convert a string into an ISO time string.

NASL Function: isotime_scan
NASL Unnamed Parameters:
  • A string
NASL Returns:
A ISO time string on success or NULL on error.
Parameters
[in]lexicLexical context of the NASL interpreter.
Returns
A tree cell.