2007-12-10 06:28:39 +03:00
/*
* libfdt - Flat Device Tree manipulation
* Copyright ( C ) 2006 David Gibson , IBM Corporation .
*
* libfdt is dual licensed : you can use it either under the terms of
* the GPL , or the BSD license , at your option .
*
* a ) This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation ; either version 2 of the
* License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public
* License along with this library ; if not , write to the Free
* Software Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston ,
* MA 02110 - 1301 USA
*
* Alternatively ,
*
* b ) Redistribution and use in source and binary forms , with or
* without modification , are permitted provided that the following
* conditions are met :
*
* 1. Redistributions of source code must retain the above
* copyright notice , this list of conditions and the following
* disclaimer .
* 2. Redistributions in binary form must reproduce the above
* copyright notice , this list of conditions and the following
* disclaimer in the documentation and / or other materials
* provided with the distribution .
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES ,
* INCLUDING , BUT NOT LIMITED TO , THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT
* NOT LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ;
* LOSS OF USE , DATA , OR PROFITS ; OR BUSINESS INTERRUPTION )
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY , WHETHER IN
* CONTRACT , STRICT LIABILITY , OR TORT ( INCLUDING NEGLIGENCE OR
* OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE ,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*/
# include "libfdt_env.h"
# include <fdt.h>
# include <libfdt.h>
# include "libfdt_internal.h"
2008-08-07 06:24:17 +04:00
struct fdt_errtabent {
2007-12-10 06:28:39 +03:00
const char * str ;
} ;
2008-08-07 06:24:17 +04:00
# define FDT_ERRTABENT(val) \
2007-12-10 06:28:39 +03:00
[ ( val ) ] = { . str = # val , }
2008-08-07 06:24:17 +04:00
static struct fdt_errtabent fdt_errtable [ ] = {
FDT_ERRTABENT ( FDT_ERR_NOTFOUND ) ,
FDT_ERRTABENT ( FDT_ERR_EXISTS ) ,
FDT_ERRTABENT ( FDT_ERR_NOSPACE ) ,
2007-12-10 06:28:39 +03:00
2008-08-07 06:24:17 +04:00
FDT_ERRTABENT ( FDT_ERR_BADOFFSET ) ,
FDT_ERRTABENT ( FDT_ERR_BADPATH ) ,
2017-01-04 19:45:20 +03:00
FDT_ERRTABENT ( FDT_ERR_BADPHANDLE ) ,
2008-08-07 06:24:17 +04:00
FDT_ERRTABENT ( FDT_ERR_BADSTATE ) ,
2007-12-10 06:28:39 +03:00
2008-08-07 06:24:17 +04:00
FDT_ERRTABENT ( FDT_ERR_TRUNCATED ) ,
FDT_ERRTABENT ( FDT_ERR_BADMAGIC ) ,
FDT_ERRTABENT ( FDT_ERR_BADVERSION ) ,
FDT_ERRTABENT ( FDT_ERR_BADSTRUCTURE ) ,
FDT_ERRTABENT ( FDT_ERR_BADLAYOUT ) ,
2017-01-04 19:45:20 +03:00
FDT_ERRTABENT ( FDT_ERR_INTERNAL ) ,
FDT_ERRTABENT ( FDT_ERR_BADNCELLS ) ,
FDT_ERRTABENT ( FDT_ERR_BADVALUE ) ,
FDT_ERRTABENT ( FDT_ERR_BADOVERLAY ) ,
FDT_ERRTABENT ( FDT_ERR_NOPHANDLES ) ,
2007-12-10 06:28:39 +03:00
} ;
2008-08-07 06:24:17 +04:00
# define FDT_ERRTABSIZE (sizeof(fdt_errtable) / sizeof(fdt_errtable[0]))
2007-12-10 06:28:39 +03:00
const char * fdt_strerror ( int errval )
{
if ( errval > 0 )
return " <valid offset/length> " ;
else if ( errval = = 0 )
return " <no error> " ;
2008-08-07 06:24:17 +04:00
else if ( errval > - FDT_ERRTABSIZE ) {
const char * s = fdt_errtable [ - errval ] . str ;
2007-12-10 06:28:39 +03:00
if ( s )
return s ;
}
return " <unknown error> " ;
}