lkml.org 
[lkml]   [2003]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: Resend [PATCH] Make KOBJ_NAME_LEN match BUS_ID_SIZE
    > How about just adding a sane
    >
    > int copy_string(char *dest, const char *src, int len)
    > {
    > int size;
    >
    > if (!len)
    > return 0;
    > size = strlen(src);
    > if (size >= len)
    > size = len-1;
    > memcpy(dest, src, size);
    > dest[size] = '\0';
    > return size;
    > }
    >
    > which is what pretty much everybody really _wants_ to have anyway? We
    > should deprecate "strncpy()" within the kernel entirely.

    This looks suspiciously like strlcpy() from the *BSDs. Why not name it
    so?

    The following patch is based on Samba's implementation (found in
    source/lib/replace.c). I just reformatted it somewhat, there are no
    functional changes. What do you think?

    René



    diff -ur linux-a/kernel/ksyms.c linux-b/kernel/ksyms.c
    --- linux-a/kernel/ksyms.c 2003-05-05 01:52:49.000000000 +0200
    +++ linux-b/kernel/ksyms.c 2003-05-25 11:02:22.000000000 +0200
    @@ -588,6 +588,7 @@
    EXPORT_SYMBOL(strnicmp);
    EXPORT_SYMBOL(strspn);
    EXPORT_SYMBOL(strsep);
    +EXPORT_SYMBOL(strlcpy);

    /* software interrupts */
    EXPORT_SYMBOL(tasklet_init);
    diff -ur linux-a/lib/string.c linux-b/lib/string.c
    --- linux-a/lib/string.c 2003-05-05 01:53:40.000000000 +0200
    +++ linux-b/lib/string.c 2003-05-25 11:12:58.000000000 +0200
    @@ -527,3 +527,28 @@
    }

    #endif
    +
    +#ifndef __HAVE_ARCH_STRLCPY
    +/**
    + * strlcpy - Copy a length-limited, %NUL-terminated string
    + * @dest: Where to copy the string to
    + * @src: Where to copy the string from
    + * @bufsize: Size of the destination buffer
    + *
    + * Returns the length of @src, or 0 if @bufsize is 0. Unlike strncpy(),
    + * strlcpy() always NUL-terminates @dest and does no padding.
    + */
    +size_t strlcpy(char *dest, const char *src, size_t bufsize)
    +{
    + size_t len = strlen(src);
    + size_t ret = len;
    +
    + if (bufsize == 0)
    + return 0;
    + if (len >= bufsize)
    + len = bufsize-1;
    + memcpy(dest, src, len);
    + dest[len] = '\0';
    + return ret;
    +}
    +#endif
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-03-22 13:35    [W:0.055 / U:88.732 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site