Re: Fixing a sample from K&R book using cake static analyser

Liste des GroupesRevenir à l c 
Sujet : Re: Fixing a sample from K&R book using cake static analyser
De : ben (at) *nospam* bsb.me.uk (Ben Bacarisse)
Groupes : comp.lang.c
Date : 23. Jun 2024, 12:23:13
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <878qywq7ou.fsf@bsb.me.uk>
References : 1 2 3
User-Agent : Gnus/5.13 (Gnus v5.13)
Anton Shepelev <anton.txt@gmail.moc> writes:

Lawrence D'Oliveiro:
>
    struct nlist *install(char *name, char *defn)
      {
        struct nlist *np = NULL;
        struct nlist *result = NULL;
        unsigned hashval;
        do /*once*/
          {
            result = lookup(name);
            if (result != NULL)
                break;
            np = (struct nlist *)calloc(1, sizeof struct nlist);
            if (np == NULL)
                break;
            np->defn = strdup(defn);
            if (np->defn == NULL)
                break;
            hashval = hash(name);
            np->next = hashtab[hashval];
            hashtab[hashval] = np;
            result = np;
            np = NULL; /* so I don't dispose of it yet */
          }
        while (false);
        if (np != NULL)
          {
            free(np->defn);
          } /*if*/
        free(np);
        return
            result;
      } /*install*/
>
Why are you so afraid of `goto' that you must emulate it
with `while' and `break'?

Why are you so fond of them that you add three extra state variables
that have to be (mentally and/or mathematically tracked) just understand
this supposedly simply function?

I think you forget to set
np->name (and to free() it in case of error).  You set
np->defn only in case of a new node, whereas the original
code did it for an existing node as well.  My absolutely
untested version is below:
>
/* install:  put (name, defn) in hashtab */
struct nlist *install(char *name, char *defn)
{  struct   nlist *np;
   unsigned        hashval;
   int             new_nm, new_nd;
   void*           old_fn;
>
   new_nm = 0; new_nd = 0; old_fn = NULL;
>
   if ((np = lookup(name)) != NULL) /* short branch first     */
   {  old_fn = (void *)np->defn;    /* do not free it here to */
      goto set_defn;  }             /* avoid a side effect    */
>
   np = (struct nlist *) malloc(sizeof(*np));
   if(np == NULL) goto error;
   new_nd = 1;
>
   if((np->name = strdup(name)) == NULL) goto error;
   new_nm = 1;
>
   hashval          = hash(name);
   np->next         = hashtab[hashval];
   hashtab[hashval] = np;
>
set_defn:
   if ((np->defn = strdup(defn)) == NULL) goto error;
>
   if( old_fn ) free( old_fn );
   return np;
error:
   if( new_nm ) free( np->name );
   if( new_nd ) free( np       );
   return NULL;
}

This, to me, is a textbook case of why goto is harmful.  I have spend
considerable time jumping up and down checking the state of all the
variables and I am still not sure I follow what this supposedly simple
function is doing.  I am pretty sure it is not functionally the same as
the original, but it's a struggle to follow it.

(And everyone seems keen on redundant casts.  Why?)

--
Ben.

Date Sujet#  Auteur
21 Jun 24 * Fixing a sample from K&R book using cake static analyser83Thiago Adams
22 Jun 24 +* Re: Fixing a sample from K&R book using cake static analyser79Lawrence D'Oliveiro
22 Jun 24 i+- Re: Fixing a sample from K&R book using cake static analyser1Tim Rentsch
23 Jun 24 i+* Re: Fixing a sample from K&R book using cake static analyser13Anton Shepelev
23 Jun 24 ii+* Re: Fixing a sample from K&R book using cake static analyser5Lawrence D'Oliveiro
23 Jun 24 iii+* Re: Fixing a sample from K&R book using cake static analyser2bart
24 Jun 24 iiii`- Re: Fixing a sample from K&R book using cake static analyser1Lawrence D'Oliveiro
24 Jun 24 iii`* Re: Fixing a sample from K&R book using cake static analyser2Anton Shepelev
24 Jun 24 iii `- Re: Fixing a sample from K&R book using cake static analyser1Lawrence D'Oliveiro
23 Jun 24 ii`* Re: Fixing a sample from K&R book using cake static analyser7Ben Bacarisse
24 Jun 24 ii `* Re: Fixing a sample from K&R book using cake static analyser6Anton Shepelev
24 Jun 24 ii  `* Re: Fixing a sample from K&R book using cake static analyser5Ben Bacarisse
24 Jun 24 ii   +- Re: Fixing a sample from K&R book using cake static analyser1Lawrence D'Oliveiro
24 Jun 24 ii   +* Re: Fixing a sample from K&R book using cake static analyser2Janis Papanagnou
24 Jun 24 ii   i`- Re: Fixing a sample from K&R book using cake static analyser1Lawrence D'Oliveiro
24 Jun 24 ii   `- Re: Fixing a sample from K&R book using cake static analyser1Tim Rentsch
23 Jun 24 i`* Re: Fixing a sample from K&R book using cake static analyser64Kaz Kylheku
23 Jun 24 i +* Re: Fixing a sample from K&R book using cake static analyser57Ben Bacarisse
24 Jun 24 i i+* Re: Fixing a sample from K&R book using cake static analyser55Anton Shepelev
24 Jun 24 i ii+* Re: Fixing a sample from K&R book using cake static analyser3Lawrence D'Oliveiro
24 Jun 24 i iii`* Re: Fixing a sample from K&R book using cake static analyser2Anton Shepelev
24 Jun 24 i iii `- Re: Fixing a sample from K&R book using cake static analyser1Lawrence D'Oliveiro
24 Jun 24 i ii`* Re: Fixing a sample from K&R book using cake static analyser51Ben Bacarisse
24 Jun 24 i ii +* Re: Fixing a sample from K&R book using cake static analyser45Lawrence D'Oliveiro
24 Jun 24 i ii i+* Re: Fixing a sample from K&R book using cake static analyser4David Brown
25 Jun 24 i ii ii`* Re: Fixing a sample from K&R book using cake static analyser3Lawrence D'Oliveiro
25 Jun 24 i ii ii +- Re: Fixing a sample from K&R book using cake static analyser1David Brown
25 Jun 24 i ii ii `- Re: Fixing a sample from K&R book using cake static analyser1Kaz Kylheku
24 Jun 24 i ii i`* Re: Fixing a sample from K&R book using cake static analyser40Ben Bacarisse
25 Jun 24 i ii i `* Re: Fixing a sample from K&R book using cake static analyser39Lawrence D'Oliveiro
25 Jun 24 i ii i  +- Re: Fixing a sample from K&R book using cake static analyser1Ben Bacarisse
25 Jun 24 i ii i  `* Re: Fixing a sample from K&R book using cake static analyser37Kaz Kylheku
25 Jun 24 i ii i   `* Re: Fixing a sample from K&R book using cake static analyser36Ben Bacarisse
26 Jun 24 i ii i    `* Re: Fixing a sample from K&R book using cake static analyser35Chris M. Thomasson
26 Jun 24 i ii i     `* Re: Fixing a sample from K&R book using cake static analyser34Kaz Kylheku
26 Jun 24 i ii i      `* Re: Fixing a sample from K&R book using cake static analyser33Janis Papanagnou
26 Jun 24 i ii i       `* Re: Fixing a sample from K&R book using cake static analyser32Kaz Kylheku
26 Jun 24 i ii i        +- Re: Fixing a sample from K&R book using cake static analyser1DFS
26 Jun 24 i ii i        +* [OT] Re: Fixing a sample from K&R book using cake static analyser26Janis Papanagnou
26 Jun 24 i ii i        i+* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser4Michael S
26 Jun 24 i ii i        ii`* Re: [OT] Reinheitsgebot and Beer without C3Janis Papanagnou
26 Jun 24 i ii i        ii `* Re: [OT] Reinheitsgebot and Beer without C2Michael S
26 Jun 24 i ii i        ii  `- Re: [OT] Reinheitsgebot and Beer without C1Janis Papanagnou
26 Jun 24 i ii i        i+- Re: [OT] Re: Fixing a sample from K&R book using cake static analyser1Michael S
26 Jun 24 i ii i        i+* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser11Janis Papanagnou
26 Jun 24 i ii i        ii+* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser9Chris M. Thomasson
26 Jun 24 i ii i        iii`* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser8Janis Papanagnou
27 Jun 24 i ii i        iii +* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser2Richard Harnden
27 Jun 24 i ii i        iii i`- Re: [OT] Re: Fixing a sample from K&R book using cake static analyser1Janis Papanagnou
29 Jun 24 i ii i        iii `* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser5Chris M. Thomasson
29 Jun 24 i ii i        iii  `* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser4Janis Papanagnou
29 Jun 24 i ii i        iii   +* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser2Kenny McCormack
29 Jun 24 i ii i        iii   i`- Re: [OT] Re: Fixing a sample from K&R book using cake static analyser1Chris M. Thomasson
29 Jun 24 i ii i        iii   `- Re: [OT] Re: Fixing a sample from K&R book using cake static analyser1Michael S
27 Jun 24 i ii i        ii`- Re: [OT] Re: Fixing a sample from K&R book using cake static analyser1Janis Papanagnou
28 Jun 24 i ii i        i`* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser9Phil Carmody
28 Jun 24 i ii i        i `* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser8Janis Papanagnou
28 Jun 24 i ii i        i  `* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser7Michael S
28 Jun 24 i ii i        i   `* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser6Janis Papanagnou
28 Jun 24 i ii i        i    +* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser3Tim Rentsch
28 Jun 24 i ii i        i    i`* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser2Janis Papanagnou
30 Jun 24 i ii i        i    i `- Re: [OT] Re: Fixing a sample from K&R book using cake static analyser1Tim Rentsch
29 Jun 24 i ii i        i    `* Re: [OT] Re: Fixing a sample from K&R book using cake static analyser2Chris M. Thomasson
29 Jun 24 i ii i        i     `- Re: [OT] Re: Fixing a sample from K&R book using cake static analyser1Chris M. Thomasson
26 Jun 24 i ii i        `* Re: Fixing a sample from K&R book using cake static analyser4David Brown
27 Jun 24 i ii i         +- Re: Fixing a sample from K&R book using cake static analyser1Richard Harnden
27 Jun 24 i ii i         `* Re: Fixing a sample from K&R book using cake static analyser2Lawrence D'Oliveiro
27 Jun 24 i ii i          `- Re: Fixing a sample from K&R book using cake static analyser1Janis Papanagnou
24 Jun 24 i ii +- Re: Fixing a sample from K&R book using cake static analyser1Tim Rentsch
25 Jun 24 i ii `* Re: Fixing a sample from K&R book using cake static analyser4Phil Carmody
25 Jun 24 i ii  +- Re: Fixing a sample from K&R book using cake static analyser1Ben Bacarisse
26 Jun 24 i ii  `* Re: Fixing a sample from K&R book using cake static analyser2Lawrence D'Oliveiro
30 Jun 24 i ii   `- Re: Fixing a sample from K&R book using cake static analyser1Phil Carmody
24 Jun 24 i i`- Re: Fixing a sample from K&R book using cake static analyser1Kaz Kylheku
24 Jun 24 i `* Re: Fixing a sample from K&R book using cake static analyser6Anton Shepelev
24 Jun 24 i  `* Re: Fixing a sample from K&R book using cake static analyser5Kaz Kylheku
24 Jun 24 i   +* Re: Fixing a sample from K&R book using cake static analyser2Kaz Kylheku
24 Jun 24 i   i`- Re: Fixing a sample from K&R book using cake static analyser1Anton Shepelev
24 Jun 24 i   `* Re: Fixing a sample from K&R book using cake static analyser2Janis Papanagnou
24 Jun 24 i    `- Re: Fixing a sample from K&R book using cake static analyser1Kaz Kylheku
22 Jun 24 +- Re: Fixing a sample from K&R book using cake static analyser1Thiago Adams
29 Jun 24 `* Re: Fixing a sample from K&R book using cake static analyser2Lawrence D'Oliveiro
29 Jun 24  `- Re: Fixing a sample from K&R book using cake static analyser1Lawrence D'Oliveiro

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal