fn(dmi); data += dmi->length; /* * Don't go off the end of the data if there is * stuff looking like string fill past the end */ while (((data-buf) < len) && (*data || data[1])) { data++; } data += 2; i++; } iounmap(buf); 
iounmap(buf); 
static int __init dmi_table(u32 base, int len, int num, void (*fn)(DMIHeader*)){    u8 *buf;    u8 *data;    DMIHeader *dmi;    int i = 1;    buf = ioremap(base, len);    if (buf == NULL) {	return -1;    }    data = buf;    /*     * Stop when we see al the items the table claimed to have     * or we run off the end of the table (also happens)     */    while ((i<num) && ((data-buf) < len)) {	dmi = (DMIHeader *)data;	/*	 * Avoid misparsing crud if the length of the last	 * record is crap	 */	if ((data-buf+dmi->length) >= len) {	    break;	}	fn(dmi);	data += dmi->length;	/*	 * Don't go off the end of the data if there is	 * stuff looking like string fill past the end	 */	while (((data-buf) < len) && (*data || data[1])) {	    data++;	}	data += 2;	i++;    }    iounmap(buf);    return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/dec63ec32ea486ab915138e8790084c22a3f7bf6/i8k.c/buggy/drivers/char/i8k.c