[fpc-devel] move(xx, ansistring[1] versus ansistring, len)

Martin Friebe martin at hybyte.com
Tue May 13 00:17:17 CEST 2008


move(somepchar^,pchar(ansi_str_dest)^,len);

doesn't check fpc_ansistr_unique. So it works only if ansi_str_dest has 
only one reference; or both strings will be modified (because no 
copy-on-write happens).

At least, that's what I get to see, if I compile with -al and look at 
the assembler.

JoshyFun wrote:
> Hello Martin,
>
> Monday, May 12, 2008, 11:27:08 PM, you wrote:
>
> MF> Hi,
> MF> I am trying to find some info on how I can use move to archive the
> MF> following:
> MF> I am looking for an equal replacement of
> MF> move(somepchar^, ansi_str_dest[1], len)
> [...]
> MF> I could prefix it with "if length(dest) > 0 then ", but I would prefer
> MF> something less noticeable...
>
> I had not checked it but I think you can use the typecasting:
>
> move(somepchar^,pchar(ansi_str_dest)^,len);
>
> as typecasting an ansistring to a pchar should return (repeat "I
> think") a pointer to ansi_str_dest[1], and if length(ansi_str_dest)=0
> then the pointer should be $00000001 :-? which should not raise any
> kind of range check.
>
>   



More information about the fpc-devel mailing list