ref: c6d4cd09a395a24ee993c1edf1031e5b01adddde
dir: /sys/man/2/venti-fcall/
.TH VENTI-FCALL 2 .SH NAME VtEntry, VtFcall, VtRoot, vtentrypack, vtentryunpack, vtfcallclear, vtfcallfmt, vtfcallpack, vtfcallunpack, vtfromdisktype, vttodisktype, vtgetstring, vtputstring, vtrootpack, vtrootunpack, vtparsescore, vtscorefmt \- venti data formats .SH SYNOPSIS .PP .ft L #include <u.h> .br #include <libc.h> .br #include <venti.h> .ta +\w'\fLxxxx'u .PP .ft L .nf enum { VtEntrySize = 40, VtRootSize = 300, VtScoreSize = 20, }; .PP .ft L .nf typedef struct VtEntry { ulong gen; /* generation number */ ushort psize; /* pointer block size */ ushort dsize; /* data block size */ uchar type; uchar flags; uvlong size; uchar score[VtScoreSize]; } VtEntry; .PP .ft L .nf typedef struct VtRoot { char name[128]; char type[128]; uchar score[VtScoreSize]; /* to a Dir block */ ushort blocksize; /* maximum block size */ uchar prev[VtScoreSize]; /* previous root block */ } VtRoot; .ta +\w'\fLPacket* 'u .PP .B void vtentrypack(VtEntry *e, uchar *buf, int index) .br .B int vtentryunpack(VtEntry *e, uchar *buf, int index) .PP .B Packet* vtfcallpack(VtFcall *f) .br .B int vtfcallunpack(VtFcall *f, Packet *p) .PP .B void vtfcallclear(VtFcall *f) .PP .B uint vttodisktype(uint type) .br .B uint vtfromdisktype(uint type) .PP .B int vtputstring(Packet *p, char *s) .br .B int vtgetstring(Packet *p, char **s) .PP .B void vtrootpack(VtRoot *r, uchar *buf) .br .B int vtrootunpack(VtRoot *r, uchar *buf) .PP .B int vtparsescore(char *s, char **prefix, uchar score[VtScoreSize]) .PP .B int vtfcallfmt(Fmt *fmt) .B int vtscorefmt(Fmt *fmt) .SH DESCRIPTION These routines convert between C representations of Venti structures and serialized representations used on disk and on the network. .PP .I Vtentrypack converts a .B VtEntry structure describing a Venti file (see .IR venti (6)) into a 40-byte .RB ( VtEntrySize ) structure at .IB buf + index *40 \fR. Vtentryunpack does the reverse conversion. .PP .I Vtfcallpack converts a .B VtFcall structure describing a Venti protocol message (see .IR venti (6)) into a packet. .I Vtfcallunpack does the reverse conversion. .PP The fields in a .B VtFcall are named after the protocol fields described in .IR venti (6), except that the .B type field is renamed .BR blocktype . The .B msgtype field holds the one-byte message type: .BR VtThello , .BR VtRhello , and so on. .PP .I Vtfcallclear frees the strings .IB f ->error \fR, .IB f ->version \fR, .IB f ->uid \fR, .IB f ->sid \fR, the buffers .IB f ->crypto and .IB f ->codec \fR, and the packet .IB f ->data \fR. .PP The block type enumeration defined in .B <venti.h> (presented in .IR venti (6)) differs from the one used on disk and in the network protocol. The disk and network representation uses different constants and does not distinguish between .BI VtDataType+ n and .BI VtDirType+ n blocks. .I Vttodisktype converts a .B <venti.h> enumeration value to the disk value; .I vtfromdisktype converts a disk value to the enumeration value, always using the .B VtDirType pointers. The .B VtFcall field .B blocktype is an enumeration value .RI ( vtfcallpack and .I vtfcallunpack convert to and from the disk values used in packets automatically), so most programs will not need to call these functions. .PP .I Vtputstring appends the Venti protocol representation of the string .I s to the packet .IR p . .I Vtgetstring reads a string from the packet, returning a pointer to a copy of the string in .BI * s \fR. The copy must be freed by the caller. These functions are used by .I vtfcallpack and .IR vtfcallunpack ; most programs will not need to call them directly. .PP .I Vtrootpack converts a .B VtRoot structure describing a Venti file tree into the 300-byte .RB ( VtRootSize ) buffer pointed to by .IR buf . .I Vtrootunpack does the reverse conversion. .PP .I Vtparsescore parses the 40-digit hexadecimal string .IR s , writing its value into .IR score . If the hexadecimal string is prefixed with a text label followed by a colon, a copy of that label is returned in .BI * prefix \fR. If .I prefix is nil, the label is ignored. .PP .I Vtfcallfmt and .I vtscorefmt are .IR print (2) formatters to print .B VtFcall structures and scores. .I Vtfcallfmt assumes that .I vtscorefmt is installed as .BR %V . .SH SOURCE .B /sys/src/libventi .SH SEE ALSO .IR venti (1), .IR venti (2), .IR venti (6) .SH DIAGNOSTICS .IR Vtentrypack , .IR vtfcallpack , .IR vtrootpack , and .I vtfcallclear cannot fail. .PP .IR Vtentryunpack , .IR vtrootunpack , .IR vtputstring , .IR vtgetstring , and .I vtparsescore return 0 on success, \-1 on error. .PP .I Vtfcallpack returns a packet on success, nil on error. .PP .I Vttodisktype and .I vtfromdisktype return .B VtCorruptType (255) when presented with invalid input.