lkml.org 
[lkml]   [2004]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/4] Simplify checks for unwanted chars
    This patch replaces the macros IS_REPLACECHAR and IS_SKIPCHAR and their
    static char arrays with inline functions. IMHO it makes the code
    slightly more readable and shrinks both code and compiled text size.

    The use of inline functions instead of macros also gives us type safety
    without having to resort to casting.

    --- ./fs/vfat/namei.c.orig 2004-11-08 21:18:48.000000000 +0100
    +++ ./fs/vfat/namei.c 2004-11-08 21:18:19.000000000 +0100
    @@ -159,25 +159,20 @@ static int vfat_cmp(struct dentry *dentr

    /* Characters that are undesirable in an MS-DOS file name */

    -static wchar_t replace_chars[] = {
    - /* `[' `]' `;' `,' `+' `=' */
    - 0x005B, 0x005D, 0x003B, 0x002C, 0x002B, 0x003D, 0,
    -};
    -#define IS_REPLACECHAR(uni) (vfat_unistrchr(replace_chars, (uni)) != NULL)
    -
    -static wchar_t skip_chars[] = {
    - /* `.' ` ' */
    - 0x002E, 0x0020, 0,
    -};
    -#define IS_SKIPCHAR(uni) \
    - ((wchar_t)(uni) == skip_chars[0] || (wchar_t)(uni) == skip_chars[1])
    +static inline int vfat_replace_char(wchar_t w)
    +{
    + return (w == 0x005B) /* [ */
    + || (w == 0x005D) /* ] */
    + || (w == 0x003B) /* ; */
    + || (w == 0x002C) /* , */
    + || (w == 0x002B) /* + */
    + || (w == 0x003D); /* = */
    +}

    -static inline wchar_t *vfat_unistrchr(const wchar_t *s, const wchar_t c)
    +static inline int vfat_skip_char(wchar_t w)
    {
    - for(; *s != c; ++s)
    - if (*s == 0)
    - return NULL;
    - return (wchar_t *) s;
    + return (w == 0x002E) /* . */
    + || (w == 0x0020); /* <space> */
    }

    static int vfat_valid_longname(const unsigned char *name, unsigned int len)
    @@ -285,11 +280,11 @@ static inline int to_shortname_char(stru
    {
    int len;

    - if (IS_SKIPCHAR(*src)) {
    + if (vfat_skip_char(*src)) {
    info->valid = 0;
    return 0;
    }
    - if (IS_REPLACECHAR(*src)) {
    + if (vfat_replace_char(*src)) {
    info->valid = 0;
    buf[0] = '_';
    return 1;
    @@ -369,7 +364,7 @@ static int vfat_create_shortname(struct
    */
    name_start = &uname[0];
    while (name_start < ext_start) {
    - if (!IS_SKIPCHAR(*name_start))
    + if (!vfat_skip_char(*name_start))
    break;
    name_start++;
    }
    -
    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 14:07    [W:7.535 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site