Files
plan9port/man/man3/venti-fcall.3
Dmitri Vereshchagin 10564b1175 tmac/tmac.an: define .MR in a groff compatible way
groff 1.23.0 added .MR to its -man macro package.  The NEWS file states
that the inclusion of the macro "was prompted by its introduction to
Plan 9 from User Space's troff in August 2020."  From d32deab it seems
that the name for Plan 9 from User Space's implementation was suggested
by groff maintainer G. Brandon Robinson.

Not sure if the intention was to make these definitions compatible, but
it would be nice if they were.

Currently, Plan 9 from User Space's .MR expects its second argument to
be parenthesized.  groff's .MR does not.  This results in extra
parentheses appearing in manual references when viewing Plan 9 from User
Space's manual pages on a system using groff.
2025-07-27 09:58:50 -04:00

276 lines
4.6 KiB
Groff

.TH VENTI-FCALL 3
.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
.MR venti 7 )
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
.MR venti 7 )
into a packet.
.I Vtfcallunpack
does the reverse conversion.
.PP
The fields in a
.B VtFcall
are named after the protocol fields described in
.MR venti 7 ,
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
.MR venti 7 )
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
.MR print 3
formatters to print
.B VtFcall
structures and scores.
.I Vtfcallfmt
assumes that
.I vtscorefmt
is installed as
.BR %V .
.SH SOURCE
.B \*9/src/libventi
.SH SEE ALSO
.MR venti 1 ,
.MR venti 3 ,
.MR venti 7
.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.