---
name: "gd_bof"
section: "3"
platform: "linux"
package: "libgetdata-doc"
version: "0.11.0-15"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/gd_bof"
---

# gd\_bof(3)

find the start of data in a Dirfile field

## NAME

gd\_bof — find the start of data in a Dirfile field

## SYNOPSIS

**#include \<getdata.h\>**

**off\_t gd\_bof(DIRFILE \****dirfile***, const char \****field\_code***);**

## DESCRIPTION

The **gd\_bof**() function queries a [dirfile(5)](/dirfile/5.md) database specified by *dirfile* and finds the beginning-of-field marker for the vector field given by *field\_code*.

The caller should not assume that the beginning-of-field marker falls on a frame boundary.  The beginning-of-field marker is never negative.

For a **RAW** field, the beginning-of-field corresponds to the frame offset of that field (see [**gd\_frameoffset**(3)](/gd_frameoffset/3.md)). The beginning-of-field marker of the special field *INDEX* is zero.

The beginning-of-field of a **PHASE** field is the beginning-of-field of its input adjusted by the **PHASE** field's shift (or zero, if the shift would make it negative).  The beginning-of-field for all other vector fields is the the latest beginning-of-field of any of its input fields.

If the beginning-of-field marker of a field is greather than or equal to its end-of-field marker (see [**gd\_eof**(3)](/gd_eof/3.md)), then that field contains no data.  For a **RAW** field, the difference between the locations of the beginning- and end-of-field markers indicates the number of samples of data actually stored on disk.

The  *dirfile* argument must point to a valid DIRFILE object previously created by a call to [**gd\_open**(3)](/gd_open/3.md).

## RETURN VALUE

Upon successful completion, **gd\_bof**() returns a non-negative integer which is the sample number of the beginning-of-field marker for the specified field.  On error, it returns a negative-valued error code.  Possible error codes are:\
  .TP 8 **GD\_E\_BAD\_CODE** The field specified by *field\_code* or one of the fields it uses as input was not found in the database.\
  .TP 8 **GD\_E\_BAD\_DIRFILE** The supplied dirfile was invalid.\
  .TP 8 **GD\_E\_DIMENSION** A scalar field was found where a vector field was expected in the definition of *field\_code* or one of its inputs, or else *field\_code* itself specified a scalar field.\
  .TP 8 **GD\_E\_INTERNAL\_ERROR** An internal error occurred in the library while trying to perform the task. This indicates a bug in the library.  Please report the incident to the GetData developers.\
  .TP 8 **GD\_E\_RECURSE\_LEVEL** Too many levels of recursion were encountered while trying to resolve *field\_code*. This usually indicates a circular dependency in field specification in the dirfile.

The error code is also stored in the **DIRFILE** object and may be retrieved after this function returns by calling [**gd\_error**(3)](/gd_error/3.md). A descriptive error string for the error may be obtained by calling [**gd\_error\_string**(3)](/gd_error_string/3.md).

## HISTORY

The **gd\_bof**() function appeared in GetData-0.7.0.

Before GetData-0.10.0, this function could also fail with the error code **GD\_E\_ALLOC**.

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

## SEE ALSO

[**gd\_eof**(3)](/gd_eof/3.md), [**gd\_error**(3)](/gd_error/3.md), [**gd\_error\_string**(3)](/gd_error_string/3.md), [**gd\_frameoffset**(3)](/gd_frameoffset/3.md), [**gd\_open**(3)](/gd_open/3.md), [dirfile(5)](/dirfile/5.md), [dirfile-encoding(5)](/dirfile-encoding/5.md)
