Copyright (C) 1994, Digital Equipment Corporation
All rights reserved.
See the file COPYRIGHT for a full description.
Last modified on Fri Feb 18 13:46:07 PST 1994 by kalsow
modified on Tue Feb 15 10:42:51 PST 1994 by mcjones
modified on Fri May 7 21:05:52 PDT 1993 by mjordan
modified on Thu Mar 05 14:55:33 PST 1992 by muller
modified on Tue Apr 24 16:38:45 1990 by jerome
UNSAFE INTERFACE M3toC;
IMPORT Ctypes;
PROCEDURE CopyTtoS(t: TEXT): Ctypes.char_star;
Return a null-terminated C string with the same contents as t
,
but not sharing any storage with t
. The result should be passed
to FreeCopiedS
after it is irrelevant.
PROCEDURE FreeCopiedS(s: Ctypes.char_star);
Free the storage for s
, which must have been returned from a call
of CopyTtoS
. It is an unchecked runtime error to free s
more
than once or to use s
after calling FreeCopiedS(s)
.
PROCEDURE SharedTtoS(t: TEXT): Ctypes.char_star;
Return a null-terminated C string with the same contents as t
.
If possible, the result will share storage with t
. FreeSharedS
should be called on the value returned by SharedTtoS
.
PROCEDURE FreeSharedS(t: TEXT; s: Ctypes.char_star);
Free the storage for s
, which must have been returned from a call
of SharedTtoS(t)
. It is an unchecked runtime error to free s
more
than once or to use s
after calling FreeSharedS(s)
.
PROCEDURE FlatTtoS(t: TEXT): Ctypes.char_star;
Return a null-terminated C string with the same contents as t
, where
the result shares storage with t
. It is a checked runtime if t
is
not a flat text of CHAR
. The standard flat
texts are Text8,
Text8Short, Text8Literal, Text8CString.
It is the client's responsibility to prevent the garbage collector
from collecting or moving t
while the result of SharedTtoS(t)
is
being used. One way to accomplish this is to maintain a reference
to (or into) t
on the stack or in the registers of any thread.
Alternatively, the collector can be disabled. See the
RTCollector
interface for details.
PROCEDURE StoT(s: Ctypes.char_star): TEXT;
Return a text with the same contents as the null-terminated C
string s
and sharing storage with t
. The result is invalid
after s
is freed.
PROCEDURE CopyStoT(s: Ctypes.char_star): TEXT;
Return a text with the same contents as the null-terminated C
string s
. This copies s
, so the result is valid even if s
is
later freed.
END M3toC.