gd_alter_spec(3) GETDATA gd_alter_spec(3)NAME
gd_alter_spec, gd_malter_spec — modify a field in a dirfile
SYNOPSIS
#include <getdata.h>
int gd_alter_spec(DIRFILE *dirfile, const char *line, int recode);
int gd_malter_spec(DIRFILE *dirfile, const char *line, const char
*parent, int recode);
DESCRIPTION
The gd_alter_spec() function modifies the field described by the field
specification line in line to the dirfile specified by dirfile. The
gd_malter_spec() function behaves similarly, but modifies the metafield
under the field indicated by the field code parent. Field specifica‐
tion lines are described in detail in dirfile-format(5).
The name of the field to be modified, which must already exist, will be
obtained from the field specification line. When adding a metafield,
line should only contain a field specification, and not a /META direc‐
tive.
If the modified field is of type RAW and the recode argument is non-ze‐
ro, the binary file associated with the field will be converted for
changes in data type and samples-per-frame. If recode is zero, no bi‐
nary file conversion will take place.
If the modified field is of type LINTERP and the recode argument is
non-zero, the look-up table file will be moved if line specifies a dif‐
ferent path, overwriting an existing file with the new pathname, if
present. If the field specified by field_code is of type other than
RAW or LINTERP, the recode argument is ignored.
Passing these functions a directive line instead of a field specifica‐
tion line will result in a syntax error. These functions never call
the registered parser callback function, even if line contains a syntax
error.
RETURN VALUE
On success, gd_alter_spec() and gd_malter_spec() return zero. On er‐
ror, -1 is returned and the dirfile error is set to a non-zero error
value. Possible error values 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 in line was not found, or the parent field
code was not found.
GD_E_BAD_DIRFILE
The supplied dirfile was invalid.
GD_E_FORMAT
A syntax error was encountered in line.
GD_E_LINE_TOO_LONG
The supplied line was longer than the parser was able to deal
with. Lines are limited by the storage size of ssize_t. On
32-bit systems, this limits line to 2**31 bytes. The limit is
larger on 64-bit systems.
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 protect‐
ed.
GD_E_RAW_IO
An I/O error occurred while translating the binary file associ‐
ated with a modified RAW field, or an I/O error occurred while
attempting to rename a LINTERP table file.
GD_E_UNKNOWN_ENCODING
The encoding scheme of the indicated format specification frag‐
ment is not known to the library. As a result, the library was
unable to translate the binary file be associated with a modi‐
fied RAW field.
GD_E_UNSUPPORTED
The encoding scheme of the indicated format specification frag‐
ment does not support translating the empty binary file associ‐
ated with a modified RAW field.
The dirfile error may be retrieved by calling gd_error(3). A descrip‐
tive error string for the last error encountered can be obtained from a
call to gd_error_string(3).
BUGS
If a CARRAY field with more than GD_MAX_CARRAY_LENGTH elements is pro‐
vided, subsequent elements will be silently truncated. GD_MAX_CAR‐
RAY_LENGTH is 2**24 on 32-bit systems. It is larger on 64-bit systems.
SEE ALSOgd_alter_bit(3), gd_alter_const(3), gd_alter_entry(3), gd_alter_lin‐
com(3), gd_alter_linterp(3), gd_alter_multiply(3), gd_alter_phase(3),
gd_alter_raw(3), gd_alter_spec(3), gd_metaflush(3), gd_open(3), gd_er‐
ror(3), gd_error_string(3), dirfile-format(5)Version 0.8.0 17 August 2011 gd_alter_spec(3)