2015-11-16 11:42:05 -03:00
/*
* linux / tools / lib / string . c
*
* Copied from linux / lib / string . c , where it is :
*
* Copyright ( C ) 1991 , 1992 Linus Torvalds
*
* More specifically , the first copied function was strtobool , which
* was introduced by :
*
* d0f1fed29e6e ( " Add a strtobool function matching semantics of existing in kernel equivalents " )
* Author : Jonathan Cameron < jic23 @ cam . ac . uk >
*/
2015-11-16 11:36:29 -03:00
# include <stdlib.h>
# include <string.h>
2015-11-16 11:42:05 -03:00
# include <errno.h>
2015-11-16 11:36:29 -03:00
# include <linux/string.h>
2015-12-15 09:39:33 -06:00
# include <linux/compiler.h>
2015-11-16 11:36:29 -03:00
/**
* memdup - duplicate region of memory
*
* @ src : memory region to duplicate
* @ len : memory region length
*/
void * memdup ( const void * src , size_t len )
{
void * p = malloc ( len ) ;
if ( p )
memcpy ( p , src , len ) ;
return p ;
}
2015-11-16 11:42:05 -03:00
/**
* strtobool - convert common user inputs into boolean values
* @ s : input string
* @ res : result
*
* This routine returns 0 iff the first character is one of ' Yy1Nn0 ' .
* Otherwise it will return - EINVAL . Value pointed to by res is
* updated upon finding a match .
*/
int strtobool ( const char * s , bool * res )
{
switch ( s [ 0 ] ) {
case ' y ' :
case ' Y ' :
case ' 1 ' :
* res = true ;
break ;
case ' n ' :
case ' N ' :
case ' 0 ' :
* res = false ;
break ;
default :
return - EINVAL ;
}
return 0 ;
}
2015-12-15 09:39:33 -06:00
/**
* strlcpy - Copy a C - string into a sized buffer
* @ dest : Where to copy the string to
* @ src : Where to copy the string from
* @ size : size of destination buffer
*
* Compatible with * BSD : the result is always a valid
* NUL - terminated string that fits in the buffer ( unless ,
* of course , the buffer size is zero ) . It does not pad
* out the result like strncpy ( ) does .
*
* If libc has strlcpy ( ) then that version will override this
* implementation :
*/
size_t __weak strlcpy ( char * dest , const char * src , size_t size )
{
size_t ret = strlen ( src ) ;
if ( size ) {
size_t len = ( ret > = size ) ? size - 1 : ret ;
memcpy ( dest , src , len ) ;
dest [ len ] = ' \0 ' ;
}
return ret ;
}
2017-04-26 15:49:21 -03:00
int prefixcmp ( const char * str , const char * prefix )
{
for ( ; ; str + + , prefix + + )
if ( ! * prefix )
return 0 ;
else if ( * str ! = * prefix )
return ( unsigned char ) * prefix - ( unsigned char ) * str ;
}