PURPOSE

Fjoin, Fjoin32 - join source into destination buffer

SYNOPSIS

#include <stdio.h>
#include "fml.h"
int
Fjoin(FBFR *dest, FBFR *src)
#include "fml32.h"
int
Fjoin32(FBFR32 *dest, FBFR32 *src)

DESCRIPTION

Fjoin() is used to join two fielded buffers based on matching fieldid/occurrence. dest and src are pointers to the destination and source fielded buffers respectively. For fields that match on fieldid/occurrence, the field value is updated in the destination buffer with the value in the source buffer. Fields in the destination buffer that have no corresponding fieldid/occurrence in the source buffer are deleted.

This function may fail due to lack of space if the new values are larger than the old; in this case, the destination buffer will have been modified. However, if this happens, the destination buffer may be re-allocated using Frealloc(3fml) and the Fjoin() function repeated. Even if the destination buffer has been partially updated, repeating the function will give the correct results.

Fjoin32 is used with 32-bit FML.

RETURN VALUES

This function returns -1 on error and sets Ferror to indicate the error condition.

ERRORS

Under the following conditions, Fjoin() fails and sets Ferror to:

[FALIGNERR]
"fielded buffer not aligned" Either the source buffer or the destination buffer does not begin on the proper boundary.
[FNOTFLD]
"buffer not fielded" Either the source buffer or the destination buffer is not a fielded buffer or has not been initialized by Finit().
[FNOSPACE]
"no space in fielded buffer" A field value is to be added or changed in a field buffer but there is not enough space remaining in the buffer.

EXAMPLE

In the following example: FBFR *src, *dest; ... if(Fjoin(dest,src) < 0) F_error("pgm_name"); if dest has fields A, B, and two occurrences of C, and src has fields A, C, and D, the resultant dest will have source field value A and source field value C.

SEE ALSO

Fintro(3fml),
Fconcat(3fml),
Fojoin(3fml),
Fproj(3fml),
Fprojcpy(3fml),
Frealloc(3fml)