Messages in this thread | | | Date | Mon, 09 Aug 2004 19:09:55 -0400 | From | John Richard Moser <> | Subject | Re: [RFC] Bug zapper? :) |
| |
Denis Vlasenko wrote: > On Monday 09 August 2004 23:07, John Richard Moser wrote: >
[...]
> > > The flaw is that you think that kernel folks don't review their code. > However, if you see some bad code, by all means - send a patch. >
Oh, no; as I said, even heavily quality assurance audited code has maybe 5 bugs per kloc. Where do the mremap() and munmap() bugs come from? Obviously you guys don't get everything.
> Asking others to do large amount of work is not very popular on this list. > Do something yourself first.
Just do it in passing; you don't have to put a sudden hard effort to do these things in. It'd be nice, but a major undertaking.
What I'm suggesting isn't much though, is it really? Consider the functions function (normal code, not necessarily kernel):
void get_food(char **a) { *a = malloc(strlen(global_food) + 1); strcpy(*a, global_food); }
/*Set our food*/ int set_food(char *food) { if (!food) return -1; /*error*/ free(global_food); /*if NULL, nothing happens*/ global_food = malloc(strlen(food) + 1); strcpy(global_food, food); return 0; }
You'll have to forgive the lack of formatting; thunderbird is mean about this :/
Anyhow, as you can see, these are quite simple. Function names are self-eplanitory, as is the process. Assumedly, these are fine.
Now, we could try another approach at this, below.
/* get_food(char **a) * Gets the current food. * * INPUT: * - char **a * Pointer to a pointer for the outputted food. * OUTPUT: * - Return * none. * - *a * Set to a copy of the current food. * PROCESS: * - Set '*a' to a newly allocated block of memory containing a copy * of the current food (global_food) * STATE CHANGE: * none. */ void get_food(char **a) { *a = malloc(strlen(global_food) + 1); strcpy(*a, global_food); }
/* set_food(char *food) * Sets the current food. * * INPUT: * - char *food * Pointer to an ASCIIZ string containing the new food * OUTPUT: * - Return * -1 on error * 0 on success * PROCESS: * - If (food is NULL) * - return error (-1) * - If (food is not NULL) * - Free current food (global_food) * - Set current food (global_food) to a newly allocated block * of memory containing a copy of 'food' * STATE CHANGE: * - current food (global_food) is set to 'food' * - Memory holding previous food is freed */ int set_food(char *food) { if (!food) return -1; /*error*/ free(global_food); /*if NULL, nothing happens*/ global_food = malloc(strlen(food) + 1); strcpy(global_food, food); return 0; }
These comment blocks are *MUCH* more verbose. They describe the process loosely, but do give enough information to allow understanding without questions.
The large amount of extra commentary is worth it, IMHO. > -- > vda > >
-- All content of all messages exchanged herein are left in the Public Domain, unless otherwise explicitly stated.
- 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/
| |