Provided by: libgetdata-doc_0.11.0-13_all bug

NAME

       gd_include, gd_include_affix, gd_include_ns — add a format specification fragment to a Dirfile

SYNOPSIS

       #include <getdata.h>

       int gd_include(DIRFILE *dirfile, const char *include_file, int parent_fragment, unsigned long flags);

       int gd_include_affix(DIRFILE *dirfile, const char *include_file, int parent_fragment, const char *prefix,
              const char *suffix, unsigned long flags);

       int gd_include_ns(DIRFILE *dirfile, const char *include_file, int parent_fragment, const char *namespace,
              unsigned long flags);

DESCRIPTION

       The  gd_include_affix() function adds the format specification fragment given by the path include_file to
       the specified dirfile, possibly creating the fragment, using the affixes specified.  This occurs  as  if,
       in the existing fragment indexed by parent_fragment, the following directive were present:

              /INCLUDE <include_file> <prefix> <suffix>

       (see  dirfile-format(5)).   The  prefix  may  include a namespace, separated from the rest of the prefix,
       which may be the empty string, by a dot (.).  If a parser callback function had been specified  when  the
       dirfile  was opened using gd_cbopen(3), or added later with gd_parser_callback(3), this callback function
       will be called if a syntax error is encountered while parsing the included fragment.

       Passing NULL as prefix or suffix is the same as using the empty string (ie. the  corresponding  affix  is
       empty).

       The  function  gd_include() is equivalent to calling gd_include_affix() with both prefix and suffix equal
       to NULL.

       The function gd_include_ns() is equivalent to calling gd_include_affix() with suffix equal  to  NULL  and
       prefix equal to namespace concatenated with a trailing dot.

       The flags argument should be a bitwise-or'd collection of zero or more of the following flags:

       GD_ARM_ENDIAN
       GD_NOT_ARM_ENDIAN
               Specifies  that  double  precision floating point raw data on disk are, or are not, stored in the
               middle-endian format used by older ARM processors.

               These flag only set the default endianness, and will be  overridden  when  an  /ENDIAN  directive
               specifies the byte sex of RAW fields, unless GD_FORCE_ENDIAN is also specified.

               On  every  platform,  one  of these flags (GD_NOT_ARM_ENDIAN on all but middle-ended ARM systems)
               indicates the native behaviour of the platform.  That symbol will equal zero, and may be omitted.

       GD_BIG_ENDIAN
       GD_LITTLE_ENDIAN
               Specifies the default byte sex of  raw  data  stored  on  disk  to  be  either  big-endian  (most
               significant  byte  first)  or  little-endian (least significant byte first).  Omitting both flags
               indicates the default should be the native endianness of the platform.

               Unlike the ARM endianness flags above, neither of these symbols is ever  zero.   Specifying  both
               these flags together will cause the library to assume that the endianness of the data is opposite
               to that of the native architecture, whatever that might be.

               These flag only set the default endianness, and will be  overridden  when  an  /ENDIAN  directive
               specifies the byte sex of RAW fields, unless GD_FORCE_ENDIAN is also specified.

       GD_CREAT
               An  empty  fragment  will be created, if one does not already exist.  The fragment will have mode
               S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH (0666), modified by the caller's  umask
               value (see umask(2)).

       GD_EXCL Ensure  that  this call creates a new fragment: when specified along with GD_CREAT, the call will
               fail if the file specified by include_file already exists.  If GD_CREAT is  not  specified,  this
               flag  is  ignord.   This flag suffers from all the limitations of the O_EXCL flag as indicated in
               open(2).

       GD_FORCE_ENCODING
               Specifies that /ENCODING directives (see dirfile-format(5))  found  in  the  fragment  should  be
               ignored.  The encoding scheme specified in flags will be used instead (see below).

       GD_FORCE_ENDIAN
               Specifies  that  /ENDIAN  directives  (see  dirfile-format(5))  found  in  the fragment should be
               ignored.  When specified with one of GD_BIG_ENDIAN or GD_LITTLE_ENDIAN, the indicated  endianness
               will  be  assumed.   If  this flag is specified with neither of those flags, the fragment will be
               assumed to have the endianness of the native architecture.

       GD_IGNORE_DUPS
               If the fragment specifies more than one field with the same name, or a field with the  same  name
               as  an  existing  field,  all  but one of them will be ignored by the parser.  Without this flag,
               parsing would fail with the GD_E_FORMAT error, possibly resulting in invocation of the registered
               callback  function.   Which  of  the  duplicate  fields  is kept is not specified, nor whether an
               existing field takes precedence over a new one or not.  As a result, this flag is typically  only
               useful in the case where identical copies of a field specification line are present.

               No  indication  is  provided  to indicate whether a duplicate field has been discarded.  If finer
               grained control is required, the caller should handle GD_E_FORMAT_DUPLICATE suberrors itself with
               an appropriate callback function.

       GD_IGNORE_REFS
               If  the  dirfile currently has a reference field (either because one was specified explicitly, or
               else because the first RAW field was used), /REFERENCE directives in the included  fragment  will
               be  ignored.  Otherwise, a /REFERENCE directive in the included fragment will replace the current
               reference field in the dirfile.

       GD_PEDANTIC
               Specifies that unrecognised lines found during the parsing of the fragment should always cause  a
               fatal  error.   Without  this flag, if a VERSION directive (see dirfile-format(5)) indicates that
               the fragment being opened conforms Standards Version newer than the  version  understood  by  the
               library, unrecognised lines will be silently ignored.

       GD_TRUNC
               If include_file already exists, it will be truncated before opening.  If the file does not exist,
               this flag is ignored.

       The flags argument may also be bitwise or'd with one of the  following  symbols  indicating  the  default
       encoding  scheme  of  the fragment.  Like the endianness flags, the choice of encoding here is ignored if
       the encoding is specified in the fragment itself, unless GD_FORCE_ENCODED is also specified.  If none  of
       these  symbols is present, GD_AUTO_ENCODED is assumed, unless this call results in creation or truncation
       of the fragment.  In that case, GD_UNENCODED is assumed.  See dirfile-encoding(5) for details on  dirfile
       encoding schemes.

       GD_AUTO_ENCODED
               Specifies  that  the encoding type is not known in advance, but should be detected by the GetData
               library.  Detection is accomplished by searching for raw data files with  extensions  appropriate
               to  the  encoding  scheme.   This  method  will  notably  fail  if  the the library is called via
               gd_putdata(3) to create a previously non-existent raw field unless a read is  first  successfully
               performed  on  the  dirfile.   Once  the library has determined the encoding scheme for the first
               time, it remembers it for subsequent calls.

       GD_BZIP2_ENCODED
               Specifies that raw data files  are  compressed  using  the  Burrows-Wheeler  block  sorting  text
               compression algorithm and Huffman coding, as implemented in the bzip2 format.

       GD_FLAC_ENCODED
               Specifies that raw data files are compressed using the Free Lossless Audio Coded (FLAC).

       GD_GZIP_ENCODED
               Specifies that raw data files are compressed using Lempel-Ziv coding (LZ77) as implemented in the
               gzip format.

       GD_LZMA_ENCODED
               Specifies that raw data files are compressed using the Lempel-Ziv Markov Chain  Algorithm  (LZMA)
               as implemented in the xz container format.

       GD_SIE_ENCODED
               Specified  that raw data files are sample-index encoded, similar to run-length encoding, suitable
               for data that change rarely.

       GD_SLIM_ENCODED
               Specifies that raw data files are compressed using the slimlib library.

       GD_TEXT_ENCODED
               Specifies that raw data files are encoded as text files containing one data sample per line.

       GD_UNENCODED
               Specifies that raw data files are not encoded, but written verbatim to disk.

       GD_ZZIP_ENCODED
               Specifies that raw data files are compressed using the DEFLATE algorithm.  All raw data files for
               a given fragment are collected together and stored in a PKZIP archive called raw.zip.

       GD_ZZSLIM_ENCODED
               Specifies  that  raw data files are compressed using a combinations of compression schemes: first
               files are slim-compressed, as with the  GD_SLIM_ENCODED  scheme,  and  then  they  are  collected
               together  and  compressed  (again) into a PKZIP archive called raw.zip, as in the GD_ZZIP_ENCODED
               scheme.

RETURN VALUE

       On success, these functions return the format specification index of the newly added fragment.  On error,
       they return a negative-valued error code.  Possible error codes are:

       GD_E_ACCMODE
               The supplied dirfile was opened in read-only mode.

       GD_E_ALLOC
               The library was unable to allocate memory.

       GD_E_BAD_DIRFILE
               The supplied dirfile was invalid.

       GD_E_BAD_INDEX
               The supplied parent fragment index was out of range.

       GD_E_BAD_REFERENCE
               The  reference  field specified by a /REFERENCE directive in the fragment (see dirfile-format(5))
               was not found, or was not a RAW field.  In this case, the included fragment will still  be  added
               to the dirfile, but the /REFERENCE directive will be ignored.

       GD_E_CALLBACK
               The registered callback function returned an unrecognised response.

       GD_E_FORMAT
               A syntax error occurred in the fragment.

       GD_E_LINE_TOO_LONG
               The  parser  encountered a line in the format specification longer than it was able to deal with.
               Lines are limited by the storage  size  of  ssize_t.   On  32-bit  systems,  this  limits  format
               specification lines to 2**31 characters.  The limit is larger on 64-bit systems.

       GD_E_IO An I/O error occured while trying to read or create the fragment.

       GD_E_PROTECTED
               The metadata of the parent fragment was protected from change.

       The  error  code is also stored in the DIRFILE object and may be retrieved after this function returns by
       calling  gd_error(3).   A  descriptive  error  string  for  the  error  may  be   obtained   by   calling
       gd_error_string(3).

HISTORY

       The dirfile_include() function appeared in GetData-0.4.0.

       In GetData-0.7.0, this function was renamed to gd_include().

       The gd_include_affix() function appeared in GetData-0.8.0.

       In GetData-0.10.0, the error return from these functions changed from -1 to a negative-valued error code.
       The gd_include_ns() function also appeared in this release.

       See gd_open(3) for history of the flags.

SEE ALSO

       gd_alter_affixes(3), gd_error(3), gd_error_string(3), gd_fragmentname(3),  gd_nfragments(3),  gd_open(3),
       gd_parser_callback(3),   gd_reference(3),   gd_uninclude(3),  dirfile(5),  dirfile-encoding(5),  dirfile-
       format(5)