Quoting Joe Perches (2014-01-29 17:24:28)
> Why not minimize the malloc length too?
> 
> maybe something like:
> 
> char *kstrimdup(const char *s, gfp_t gfp)
> {
>         char *buf;
>         const char *begin = skip_spaces(s);
>         size_t len = strlen(begin);
> 
>         while (len && isspace(begin[len - 1]))
>                 len--;
> 
>         buf = kmalloc_track_caller(len + 1, gfp);
>         if (!buf)
>                 return NULL;
> 
>         memcpy(buf, begin, len);
>         buf[len] = 0;
> 
>         return buf;
> }

I figured it would be mostly for small trimming, but it seems like
it could be and advantage and used more generally this way.

I have a couple of small changes to return NULL in empty string/all ws
cases and fix a buffer underrun.

How does this look?

Thanks,

Sebastian


char *kstrimdup(const char *s, gfp_t gfp)
{                                                                               
 
        char *buf;                                                              
 
        const char *begin = skip_spaces(s);                                     
 
        size_t len = strlen(begin);                                             
 

        if (len == 0)                                                           
 
                return NULL;                                                    
 
                                                                                
 
        while (len > 1 && isspace(begin[len - 1]))                              
 
                len--;                                                          
 
                                                                                
 
        buf = kmalloc_track_caller(len + 1, gfp);                               
 
        if (!buf)                                                               
 
                return NULL;                                                    
 
                                                                                
 
        memcpy(buf, begin, len);                                                
 
        buf[len] = '\0';                                                        
    
                                                                                
 
        return buf;                                                             
 
}        



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to