[libvirt] [PATCH] Introduce virStrncpy.

Daniel Veillard veillard at redhat.com
Tue Sep 22 14:12:58 UTC 2009


On Tue, Sep 22, 2009 at 02:23:26PM +0200, Chris Lalancette wrote:
> Add the virStrncpy function, which takes a dst string, source string,
> the number of bytes to copy and the number of bytes available in the
> dest string.  If the source string is too large to fit into the
> destination string, including the \0 byte, then no data is copied and
> the function returns NULL.  Otherwise, this function copies n bytes
> from source into dst, including the \0, and returns a pointer to the
> dst string.  This function is intended to replace all unsafe uses
> of strncpy in the code base, since strncpy does *not* guarantee that
> the buffer terminates with a \0.
[...]
> diff --git a/src/util/util.h b/src/util/util.h
> index f9715ab..2489f63 100644
> --- a/src/util/util.h
> +++ b/src/util/util.h
> @@ -164,6 +164,10 @@ void virSkipSpaces(const char **str);
>  int virParseNumber(const char **str);
>  int virAsprintf(char **strp, const char *fmt, ...)
>      ATTRIBUTE_FMT_PRINTF(2, 3);
> +char *virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
> +    ATTRIBUTE_RETURN_CHECK;
> +#define virStrcpy(dest, src, destbytes) virStrncpy(dest, src, strlen(src), destbytes)
> +#define virStrcpyStatic(dest, src) virStrncpy(dest, src, strlen(src), sizeof(dest))
>  
>  #define VIR_MAC_BUFLEN 6
>  #define VIR_MAC_PREFIX_BUFLEN 3

  I would just feel beter if we kept virStrcpy and virStrcpyStatic real
functions. I prefer my macros names all uppercase and it's not like we
will gain much using macros. Actually the compiler (if gcc) probably
optimize much of this out, and the fact we are using a wrapper will
mostly kill those. The point is cleaning things up, not optimizing :)

  ACK but I would feel a bit better with purely function entry points
  ... that can still be done later as a tiny patch

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list