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

NAME

       gd_alter_entry — modify the metadata of a Dirfile field

SYNOPSIS

       #include <getdata.h>

       int gd_alter_entry(DIRFILE *dirfile, const char *field_code, const gd_entry_t *entry, int
              recode);

DESCRIPTION

       The gd_alter_entry() function modifies the field specified by field_code  in  the  dirfile
       specified  by dirfile to correspond to the new parameters specified by entry.  In addition
       to specifying a regular field, field_code may also refer to a metafield by  specifying  it
       using  its  full  (slashed)  field  code.   However,  field_code  should  never  contain a
       representation suffix.

       The form of entry is described in detail in the get_entry(3) man page.   The  entry->field
       and   entry->fragment_index  members  are  ignored  by  this  function  and  need  not  be
       initialised.  All other members appropriate to the field  type  of  field_code  should  be
       initialised,  except  as  noted  below.   To  change  the  fragment  index of a field, use
       gd_move(3).  To change the name of a field, use gd_rename(3).

       The only flags in the entry->flags member  which  are  honoured  are  GD_EN_HIDDEN,  which
       should  be  set  or  cleared  to  set  the hiddenness of the entry (see gd_hidden(3)), and
       GD_EN_COMPSCAL, which indicates whether scalar parameters are initialised from the complex
       valued or purely real member, which both are present (LINCOM, POLYNOM, RECIP).

       If  field_code  specifies a RAW field and the recode argument is non-zero, the binary file
       associated with the field will be converted for changes  in  data  type  and  samples-per-
       frame.  In this case, the field's I/O pointer will be reset to the beginning-of-frame.  If
       recode is zero, no binary file conversion will take place.

       If field_code specifies a LINTERP field and the recode argument is non-zero,  the  look-up
       table  file  will be moved if entry->table specifies a different path.  If a file with the
       new pathname already exists, it will be overwritten.  If the field specified by field_code
       is of type other than RAW or LINTERP, the recode argument is ignored.

       If field_code specified a LINCOM or POLYNOM field, the value of entry->comp_scal indicates
       whether the purely real scalar lists (entry->a, or entry->b and entry->m) or  the  complex
       valued   lists  (entry->ca,  or  entry->cb  and  entry->cm)  will  be  used.   The  unused
       counterparts need not be initialised.

       The entry->field_type member must correspond  to  the  field  type  of  field_code.   This
       interface  cannot  be  used to change the type of a given field.  To do so, delete the old
       field first with gd_delete(3), and then create a  new  field  of  the  desired  type  with
       gd_add(3).

       Some  entry  members  have  special  values which indicate no change should be made to the
       member.  These special values are:

       NULL:   any of the string members;

       0:      spf, n_fields, numbits, cdividend, dividend, or array_len;

       -1:     bitnum or period;

       GD_NULL:
               data_type or const_type;

       GD_WINDOP_UNK:
               windop.

       All entry->scalar elements relevant for the given field type must be initialised to one of
       the following values:

       •   a  pointer  to  a  field  code  indicating  a  new  scalar  field  to  be used for the
           corresponding field parameter.  If the parameter was previously a literal  number,  it
           will be replaced by the specified field code.  If the parameter was previously a field
           code, the new field code will replace the old one.  If  the  field  code  specifies  a
           CARRAY field, the corresponding entry->scalar_ind element should also be set.

       •   a pointer to the empty string ("").  In this case, no change is made to the field code
           for the corresponding field parameter: if one already existed, it is  kept,  otherwise
           the  corresponding  literal  numerical  parameter  is  used.   If  the  value  of  the
           corresponding numerical entry member is the special value listed above  indicating  no
           change,  no  change  is made to the field parameter at all.  NB: In this case, GetData
           also ignores the corresponding entry->scalar_ind element, even if it differs from  the
           current  value.   To  change  a  scalar_ind element without changing the corresponding
           scalar, set that scalar element to its current value (at which point GetData  operates
           as per the previous bullet).

       •   the  NULL  pointer.  If the corresponding field parameter was previously a field code,
           the field code will be deleted and a literal number used instead.  In the special case
           when  a scalar element is NULL and the corresponding numerical entry member contains a
           special value indicating  no  change  listed  above,  GetData  will  de-reference  the
           previous  field  code  value  and convert it into a literal number before removing the
           field code from the entry.

       If this function is used to increase the length of a CARRAY field, the added elements will
       be uninitialised.  Use gd_put_carray_slice(3) or equivalent to initialise them.

RETURN VALUE

       On  success,  gd_alter_entry()  return  zero.    On error, a negative-valued error code is
       returned.  Possible error codes are:

       GD_E_ACCMODE
               The specified dirfile was opened read-only.

       GD_E_ALLOC
               The library was unable to allocate memory.

       GD_E_BAD_CODE
               The field specified by field_code was not found or a supplied field code  did  not
               contain  the  appropriate  prefix  or  suffix.   This  error  may also result from
               attempting to dereference a scalar  field  code  which  indicates  a  non-existent
               field.

       GD_E_BAD_DIRFILE
               The supplied dirfile was invalid.

       GD_E_BAD_ENTRY
               One or more of the parameters specified in entry was invalid.

       GD_E_BAD_FIELD_TYPE
               The  entry->field_type  parameter  did  not  correspond  to  the type of the field
               specified by field_code, or an attempt was made  to  modify  the  immutable  INDEX
               field.   This  error may also result from attempting to dereference a scalar field
               code which does not indicate a CONST or CARRAY field.

       GD_E_BAD_TYPE
               The entry->data_type parameter provided with a RAW entry, or the entry->const_type
               parameter provided with a CONST or CARRAY entry, was invalid.

       GD_E_IO An I/O error occurred while translating the binary file associated with a modified
               RAW field, or an I/O error occurred while attempting to  rename  a  LINTERP  table
               file.

       GD_E_PROTECTED
               The  metadata  of  the  fragment  was  protected  from  change.   Or, a request to
               translate the binary file associated with a RAW field was attempted, but the  data
               of the fragment was protected.

       GD_E_UNKNOWN_ENCODING
               The encoding scheme of the indicated format specification fragment is not known to
               the library.  As a result, the library was unable to translate the binary file  be
               associated with a modified RAW field.

       GD_E_UNSUPPORTED
               The  encoding  scheme  of  the  indicated  format  specification fragment does not
               support translating the binary file associated with a modified RAW field.

       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 function dirfile_alter_entry() appeared in GetData-0.5.0.

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

       In GetData-0.8.0, the first version supporting fragment affixes, this function would apply
       the  destination  fragment's affixes to the supplied entry->field name.  In GetData-0.8.1,
       this changed: gd_alter_entry() now assumes entry->field  contains  the  full  field  name,
       including any necessary affixes.

       In GetData-0.10.0, the error return changed from -1 to a negative-valued error code.

       See gd_entry(3) for the history of the gd_entry_t structure.

SEE ALSO

       gd_alter_bit(3),      gd_alter_carray(3),      gd_alter_const(3),      gd_alter_divide(3),
       gd_alter_lincom(3),    gd_alter_linterp(3),    gd_alter_multiply(3),    gd_alter_phase(3),
       gd_alter_polynom(3),  gd_alter_raw(3),  gd_alter_recip(3), gd_alter_spec(3), gd_delete(3),
       gd_error(3),   gd_error_string(3),   gd_hidden(3),   gd_malter_spec(3),   gd_metaflush(3),
       gd_move(3), gd_open(3), gd_put_carray_slice(3), gd_rename(3), dirfile-format(5)