<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML ><HEAD ><TITLE >Return Conventions</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE="Unreliable Guide To Hacking The Linux Kernel" HREF="book1.html"><LINK REL="UP" TITLE="Routines and Conventions" HREF="c412.html"><LINK REL="PREVIOUS" TITLE="Routines and Conventions" HREF="c412.html"><LINK REL="NEXT" TITLE="Breaking Compilation" HREF="x428.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Unreliable Guide To Hacking The Linux Kernel</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="c412.html" ACCESSKEY="P" ><<< Previous</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Routines and Conventions</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="x428.html" ACCESSKEY="N" >Next >>></A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="CONVENTION-RETURNS" ></A >Return Conventions</H1 ><P > For code called in user context, it's very common to defy C convention, and return <SPAN CLASS="RETURNVALUE" >0</SPAN > for success, and a negative error number (eg. <SPAN CLASS="RETURNVALUE" >-EFAULT</SPAN >) for failure. This can be unintuitive at first, but it's fairly widespread in the networking code, for example. </P ><P > The filesystem code uses <TT CLASS="FUNCTION" >ERR_PTR()</TT > <TT CLASS="FILENAME" >include/linux/fs.h</TT >; to encode a negative error number into a pointer, and <TT CLASS="FUNCTION" >IS_ERR()</TT > and <TT CLASS="FUNCTION" >PTR_ERR()</TT > to get it back out again: avoids a separate pointer parameter for the error number. Icky, but in a good way. </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="c412.html" ACCESSKEY="P" ><<< Previous</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="book1.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="x428.html" ACCESSKEY="N" >Next >>></A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Routines and Conventions</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="c412.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Breaking Compilation</TD ></TR ></TABLE ></DIV ></BODY ></HTML >