On Thu, Sep 5, 2013 at 1:29 PM, Waiman Long<waiman.long@xxxxxx> wrote:I am sorry that I misunderstand what you said. I will do what you and Al advise me to do.It is not as simple as doing a strncpy().Yes it damn well is.
Stop the f*cking stupid arguments, and instead listen to what I say.
Here. Let me bold-face the most important part for you, so that you
don't miss it in all the other crap:
MAKE prepend() JUST USE "strncpy()" INSTEAD OF "memcpy()".
Nothing else. Seriously. Your "you can't do it because we copy
backwards" arguments are pure and utter garbage, exactly BECAUSE YOU
DON'T CHANGE ANY OF THAT. You can actually use the unreliable length
variable BUT YOU MUST STILL STOP AT A ZERO.
Get it?
You're complicating the whole thing for no good reason. I'm telling
you (and HAVE BEEN telling you multiple times) that you cannot use
"memcpy()" because the length may not be reliable, so you need to
check for zero in the middle and stop early. All your arguments have
been totally pointless, because you don't seem to see that simple and
fundamental issue. You don't change ANYTHING else. But you damn well
not do a "memcpy", you do something that stops when it hits a NUL
character.
We call that function "strncpy()". I'd actually prefer to write it out
by hand (because somebody could implement "strncpy()" as a
questionable function that accesses past the NUL as long as it's
within the 'n'), and because I think we might want to do that
word-at-a-time version of it, but for a first approximation, just do
that one-liner version.
Don't do anything else. Don't do locking. Don't do memchr. Just make
sure that you stop at a NUL character, and don't trust the length,
because the length may not match the pointer. That's was always ALL
you needed to do.
Linus