Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Lawrence D'Oliveiro Newsgroups: comp.lang.c Subject: Re: Fixing a sample from K&R book using cake static analyser Date: Mon, 24 Jun 2024 00:34:22 -0000 (UTC) Organization: A noiseless patient Spider Lines: 45 Message-ID: References: <20240623034624.135@kylheku.com> <87wmmfq4if.fsf@bsb.me.uk> <20240624012527.8bbe16b96f5bfca10feadb5c@gmail.moc> <87zfrbnsvv.fsf@bsb.me.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Injection-Date: Mon, 24 Jun 2024 02:34:23 +0200 (CEST) Injection-Info: dont-email.me; posting-host="3048fea01d51f9337586ac8e02824e6c"; logging-data="624371"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+soyctxaOC8xUgdh6H8jrA" User-Agent: Pan/0.158 (Avdiivka; ) Cancel-Lock: sha1:gU/BrpIyl0Vb1xkw9AgKLSThpDo= Bytes: 2606 On Mon, 24 Jun 2024 00:25:56 +0100, Ben Bacarisse wrote: > struct nlist *install(const char *name, const char *defn) > { > struct nlist *node = lookup(name); > if (node) { > char *new_defn = strdup(defn); > if (new_defn) { > free(node->defn); > node->defn = new_defn; > return node; > } > else return NULL; > } > else { > struct nlist *new_node = malloc(sizeof *new_node); > char *new_name = strdup(name), *new_defn = strdup(defn); > if (new_node && new_name && new_defn) { > unsigned hashval = hash(name); > new_node->name = new_name; > new_node->defn = new_defn; > new_node->next = hashtab[hashval]; > return hashtab[hashval] = new_node; > } > else { > free(new_defn); > free(new_name); > free(new_node); > return NULL; > } > } > } > > We have four cases: > > node with the name found > new definition allocated new definition not allocated > node with the name not found > new node, name and definition all allocated not all of new node, > name and definition allocated. > > We can very simply reason about all of these situations. Too many different paths in the control flow, though. I think it’s a good idea to minimize that.