ÔÚÄں˵ĴúÂëºÍÇý¶¯³ÌÐòÖо³£¼ûµ½ERR_PTR, IS_ERR, PTR_ERRÕâÈý¸öÄÚÁªº¯Êý¡£
Ðí¶àµÄÄں˺¯ÊýÐèÒª·µ»ØÒ»¸öÖ¸Õ룬µ«ÊǺ¯ÊýµÄµ÷ÓÿÉÄÜʧ°Ü£¬Ò»°ãÎÒÃÇ´¦ÀíÕâÑùµÄÇéÐζ¼ÊÇ·µ»ØÒ»¸öNULLÖ¸Õ룬¾ÍÏñmalloc»òkmallocÔÚûÓлñµÃÖ¸¶¨µÄ¿Õ¼äÉêÇëʱµÄ·µ»ØÖµÒ»Ñù¡£µ«ÊÇÓÐʱÎÒÃÇÏëÖªµÀµ¼Öº¯Êýʧ°ÜµÄÔÒò£¬µ«ÊÇ·µ»ØNULL¾ÍÏÔµÃÐÅÏ¢²»¹»¡£Òò´ËÓÐЩº¯Êý·µ»ØÒ»¸öʵ¼ÊµÄ´íÎó±àÂëÒÔ±ã¶ÔÒýÆð´íÎóµÄÔÒò×öһЩ´¦Àí¡£ºÜ¶àÄں˽ӿÚͨ¹ý°Ñ´íÎóÖµ±àÂëµ½Ò»¸öÖ¸ÕëÖµÖÐÀ´·µ»Ø´íÎóÐÅÏ¢¡£µ±´¦ÀíÕâÑùµÄº¯Êýʱ£¬ÅжÏÊÇ·ñ³É¹¦µ÷ÓþͲ»ÄÜÊǼòµ¥µÄºÍNULL½øÐбȽϡ£ÎªÁË·½±ãʹÓÃÕâÑùµÄÀàÐͽӿڣ¬2.6µÄÄÚºËÔÚlinux/err.hÖÐʵÏÖÁËÈý¸öÄÚÁªº¯Êý£º
inline void *ERR_PTR(long error)
{
return (void *) error;
}
·µ»ØÖ¸ÕëÀàÐ͵ĺ¯Êý¿ÉÒÔͨ¹ýÕâ¸öº¯ÊýÀ´·µ»ØÒ»¸ö´íÎóÖµ¡£ÕâÀïµÄerrorÊÇͨ³£µÄ¸ºµÄ´íÎó±àÂë¡£µ÷ÓÃÕß¿ÉÒÔʹÓÃIS_ERRÀ´¼ì²éËù·µ»ØµÄÖ¸ÕëÊÇ·ñÊÇÒ»¸ö´íÎó±àÂë
inline long IS_ERR(const void *ptr)
{
return (unsigned long)ptr > (unsigned long)-1000L;
}
Èç¹ûÐèҪʵ¼ÊµÄ´íÎó±àÂ룬¿ÉÒÔͨ¹ýPTR_ERRº¯ÊýÌáÈ¡
inline long PTR_ERR(const void *ptr)
{
return (long) ptr;
}
Ö»ÓÐÔÚIS_ERR·µ»ØÕæµÄʱºò²ÅÄÜʹÓÃPTR_ERR¡£