1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
.TH LIBNORMALFORM_CLONE 3 LIBNORMALFORM
.SH NAME
libnormalform_clone \- Create a deep clone
.SH SYNOPSIS
.nf
#include <libnormalform.h>
LIBNORMALFORM_SENTENCE *libnormalform_clone(LIBNORMALFORM_SENTENCE *\fIx\fP);
.fi
.PP
Link with
.IR -lnormalform .
.SH DESCRIPTION
The
.BR libnormalform_clone ()
function creates a deep clone of
.IR x ,
letting the application use the same
sentence in concurrently from two threads.
.PP
Before calling the
.BR libnormalform_clone ()
function, application provided objects in
.I x
must be configured for cloning:
.I .copy_for_clone
in each
.IR "struct libnormalform_variable" ,
.IR "struct libnormalform_function" ,
.IR "struct libnormalform_map" ,
and
.IR "struct libnormalform_transformer" ,
shall either be set to the copy of the
object to use in the clone of
.IR x ,
or to
.I NULL
if the object can safely be used by the
clone of
.IR x .
.PP
The returned pointer shall either be
deallocated with the
.BR libnormalform_free (3)
function or be relinquished by being
used as part of another sentence.
.SH RETURN VALUE
Upon successful completion, the
.BR libnormalform_clone ()
function returns a deep clone of
.IR x ;
otherwise, the function returns
.I NULL
and sets
.I errno
to indicate the error.
.SH ERRORS
The
.BR libnormalform_clone ()
function fails if:
.TP
.B ENOMEM
Insufficient memory was available to
create the sentence object.
.PP
The
.BR libnormalform_clone ()
function also fails without setting
.I errno
if
.I x
is
.IR NULL .
.SH ATTRIBUTES
For an explanation of the terms used in this
section, see
.BR attributes (7)
and
.IR "info \(dq(libc)POSIX Safety Concepts\(dq" .
.TS
allbox;
lb lb lb
l l l.
Interface Attribute Value
T{
.BR libnormalform_clone ()
T} Thread safety MT-Safe race:\fIx\fP
T{
.BR libnormalform_clone ()
T} Async-signal safety AS-Unsafe heap
T{
.BR libnormalform_clone ()
T} Async-cancel safety AC-Safe mem, AC-Unsafe heap
.TE
.SH SEE ALSO
.BR libnormalform (7),
.BR libnormalform_ref (3),
.BR libnormalform_free (3)
|