次の例は、バインディングの作成方法を示しています。
#include <stdio.h>
#include <xfn/xfn.h>
#include <string.h>
/*
このルーチンは "name" によって提供される名前を用いて
バインディングを作成する。提供される名前のリファレンスのタイプは
"reference_type" で、アドレスのタイプは "address_type"である。
関数の使用例として
fns_create_bindings(
"user/jsmith/service/calendar"、
"onc_calendar"、
"onc_cal_str"、
"jsmith&calserver");
がある
*/
int fns_create_bindings(
char *name,
char *reference_type,
char *address_type,
char *data)
{
int return_status;
FN_composite_name_t *binding_name;
FN_identifier_t ref_id, addr_id;
FN_status_t *status;
FN_ref_t *reference;
FN_ref_addr_t *address;
FN_ctx_t *initial_context;
/* 初期コンテキストの獲得 */
status = fn_status_create();
initial_context = fn_ctx_handle_from_initial(0, status);
/* エラーメッセージの状態のチェック */
if ((return_status = fn_status_code(status)) != FN_SUCCESS) {
fprintf(stderr, "Unable to obtain the initial context¥n");
return (return_status);
}
/* プリンタ名に付ける複合名の獲得 */
binding_name = fn_composite_name_from_str((unsigned char *) name);
/* アドレスのコンストラクト */
addr_id.format = FN_ID_STRING;
addr_id.length = strlen(address_type);
addr_id.contents = (void *) address_type;
address = fn_ref_addr_create(&addr_id,
strlen(data), (const void *) data);
/* リファレンスのコンストラクト */
ref_id.format = FN_ID_STRING;
ref_id.length = strlen(reference_type);
ref_id.contents = (void *) reference_type;
reference = fn_ref_create(&ref_id);
/* リファレンスにアドレスを追加する */
fn_ref_append_addr(reference, address);
/* 割り当ての作成 */
fn_ctx_bind(initial_context, binding_name, reference, 0, status);
/* エラー状態をチェックして返す */
return_status = fn_status_code(status);
fn_composite_name_destroy(binding_name);
fn_ref_addr_destroy(address);
fn_ref_destroy(reference);
fn_ctx_destroy(initial_context);
return (return_status);
}