
ok, now i'm just being entertained by the truly strange code i'm running across. here's a snippet from board/astro/mcf5373l/mcf5373l.c; what strikes you as odd about it?
int misc_init_r(void) { int retval = 0;
puts("Configure Xilinx FPGA..."); retval = astro5373l_xilinx_load(); if (!retval) { puts("failed!\n"); return retval; } puts("done\n");
puts("Configure Altera FPGA..."); retval = astro5373l_altera_load(); if (!retval) { puts("failed!\n"); return retval; } puts("done\n");
return retval; }
yes, if astro5373l_xilinx_load() returns zero, then "!retval" is true, at which point that call will have failed, and this routine will return ... zero. same with the code below that. so under what circumstances can that routine return zero? oh ... it can't:
/* Initialize the fpga. Return 1 on success, 0 on failure. */ int astro5373l_xilinx_load(void) { int i;
fpga_init();
for (i = 0; i < CONFIG_FPGA_COUNT; i++) { /* * I did not yet manage to get relocation work properly, * so set stuff here instead of static initialisation: */ xilinx_fns.pre = xilinx_pre_config_fn; xilinx_fns.pgm = xilinx_pgm_config_fn; xilinx_fns.clk = xilinx_clk_config_fn; xilinx_fns.init = xilinx_init_config_fn; xilinx_fns.done = xilinx_done_config_fn; xilinx_fns.wr = xilinx_wr_config_fn; xilinx_fns.bwr = xilinx_fastwr_config_fn; xilinx_fpga[i].iface_fns = (void *)&xilinx_fns; fpga_add(fpga_xilinx, &xilinx_fpga[i]); } return 1;
i've seen other strange examples like this.
rday