LWN.net Logo

"fast AND correct strncpy" not working by itself?

"fast AND correct strncpy" not working by itself?

Posted Aug 24, 2003 14:50 UTC (Sun) by dmantione (guest, #4640)
In reply to: "fast AND correct strncpy" not working by itself? by dwheeler
Parent article: [PATCH] fast AND correct strncpy

Try "GCC -O2 -march=athlon -S strncpy.c".
It seems the new version is not an improvement in any case.

Daniël


(Log in to post comments)

"fast AND correct strncpy" not working by itself?

Posted Aug 24, 2003 16:11 UTC (Sun) by IkeTo (subscriber, #2122) [Link]

> It seems the new version is not an improvement in any case.

Interesting, but real. I've tested it, and the old version is consistently faster than the old version, whether count is smaller or larger than the source string length.

"fast AND correct strncpy" not working by itself?

Posted Aug 25, 2003 2:41 UTC (Mon) by IkeTo (subscriber, #2122) [Link]

I mean, the old version is consistently faster than the new one. It is in the range of 20% faster.

"fast AND correct strncpy" not working by itself?

Posted Aug 28, 2003 9:30 UTC (Thu) by akukula (guest, #3862) [Link]

>It seems the new version is not an improvement in any case.

I agree. The same result can be yielded with different representation of this function, e.g.:
char* strncpy(char* dest, const char* src, unsigned count)
{
  char *tmp = dest;
  for (; count; --count)  if ((*tmp++ = *src))  ++src;
  return dest;
}
It's hard to imagine this sort of function to be more efficient...

I'm not a kernel hacker but why all of those functions doesn't terminate 'dest' if strlen(src) > count ???

And in case SCO is playing around, the above code is (C) 2003 Free Software Foundation, written from scratch by me, licensed under GPLv2. SCO is not permitted to use this code unless it make a donation of $1.000.000 (one million of US dollars) to FSF :)))

"fast AND correct strncpy" not working by itself?

Posted Aug 28, 2003 13:08 UTC (Thu) by IkeTo (subscriber, #2122) [Link]

> I'm not a kernel hacker but why all of those functions doesn't
> terminate 'dest' if strlen(src) > count ???

You don't need to be kernel hacker to understand that in POSIX strncpy is defined like that. In contrast, strncat does terminate the resulting string in such cases.

"fast AND correct strncpy" not working by itself?

Posted Aug 28, 2003 15:44 UTC (Thu) by dwheeler (subscriber, #1216) [Link]

Exactly right. strncpy _must_, by spec, \0 out the rest of the string. Which means that, in most code, you don't really want strncpy(); it wastes time zero'ing out bytes you probably don't care about.

If you want limited-length string operations, I suggest using the strlcpy() / strlcat() functions, which aren't in the official C standard but ARE widely available.

"fast AND correct strncpy" not working by itself?

Posted Aug 28, 2003 20:09 UTC (Thu) by akukula (guest, #3862) [Link]

Thanks for suggestions. Indeed, I found a table comparing performance of different 'str*cpy()'. Worth noting!
http://www.courtesan.com/todd/papers/strlcpy.html

> it wastes time zero'ing out bytes you probably don't care about.
Maybe someone then explain why the heck it is in kernel which I presume should use the most efficient algorithms?

Copyright © 2008, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds