lkml.org 
[lkml]   [2004]   [Nov]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: question on common error-handling idiom
    >There's something I've been wondering about for a while.  There is a lot of code
    >in linux that looks something like this:
    >
    >err = -ERRORCODE
    >if (error condition)
    > goto out;

    That's because there might something as:

    err = -EPERM;
    if(error) { goto out; }
    do something;
    if(error2) { goto out; }
    do something more;
    if(error3) { goto out; }

    Is shorter than:

    if(error) { err = -EPERM; goto out; }
    do something;
    if(error2) { err = -EPERM; goto out; }
    do something more;
    if(error3) { err = -EPERM; goto out; }


    >Is there any particular reason why the former is preferred? Is the compiler

    To keep it short. Because it might have been worse than just err =xxx:

    if(error) {
    do this and that;
    and more;
    even more;
    more more;
    goto out;
    }

    Repeating that over and over is not that good. So we wrap it a little bit to do
    a "staircase" deinitialization:

    err = -EPERM;
    if(error) { goto this_didnot_work; }
    ...
    err = -ENOSPC;
    if(error) { goto that_didnot_work; }


    this_didnot_work:
    all uninitializations needed

    that_didnot_work:
    all other uninit's

    return err;


    So to summarize, it's done to reduce code whilst keeping the error code around
    until we actually leave the function.


    My € 0.02!


    Jan Engelhardt
    --
    Gesellschaft für Wissenschaftliche Datenverarbeitung
    Am Fassberg, 37077 Göttingen, www.gwdg.de
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:07    [W:0.024 / U:0.748 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site