# Regular Meeting (2022.4.18)
* About doc for VME downloader.
* Enhance SW code:
* [Jserv-你所不知道的C語言-goto](https://hackmd.io/@sysprog/c-prog/%2Fs%2FB1e2AUZeM)
* [Ref](https://hackmd.io/@xB7TVSr_T0mpDKOBcyhI4Q/rJtQx8DFm?type=view)
* 下水道風格(**Sewer style**)
* [Jserv](http://wiki.csie.ncku.edu.tw/User/jserv)
Original:
``` C
if (sread(fd, cmd, 2) != 1)
return 1;
if (memcmp(cmd, "ge", 2) == 0) {
if (sread(fd, cmd, 6) != 1)
return 1;
memcpy(result, xvcInfo, strlen(xvcInfo));
if (write(fd, result, strlen(xvcInfo)) != strlen(xvcInfo)) {
perror("write");
return 1;
}
if (verbose) {
printf("%u : Received command: 'getinfo'\n", (int)time(NULL));
printf("\t Replied with %s\n", xvcInfo);
}
break;
} else if (memcmp(cmd, "se", 2) == 0) {
if (sread(fd, cmd, 9) != 1)
return 1;
memcpy(result, cmd + 5, 4);
if (write(fd, result, 4) != 4) {
perror("write");
return 1;
}
if (verbose) {
printf("%u : Received command: 'settck'\n", (int)time(NULL));
printf("\t Replied with '%.*s'\n\n", 4, cmd + 5);
}
break;
} else if (memcmp(cmd, "sh", 2) == 0) {
if (sread(fd, cmd, 4) != 1)
return 1;
if (verbose) {
printf("%u : Received command: 'shift'\n", (int)time(NULL));
}
} else {
fprintf(stderr, "invalid cmd '%s'\n", cmd);
return 1;
}
```
Modified:
``` C
if (!StreamRead(eth_fd, cmd, 2) )
goto out;
/* Read and judge command */
if (memcmp(cmd, "ge", 2) == (int) 0 ) {
jtag_eth_err = 1;
if (!StreamRead(eth_fd, cmd, 6) )
goto out;
memcpy(result, kXVCInfo, strlen(kXVCInfo) );
if ( write(eth_fd, result, strlen(kXVCInfo)) != strlen(kXVCInfo) )
goto err;
DEBUG_MSG("Received command getXVCInfo, Replied with:");
DEBUG_MSG(kXVCInfo);
break;
} else if (memcmp(cmd, "se", 2) == (int) 0) {
jtag_eth_err = 2;
if (!StreamRead(eth_fd, cmd, 9) )
goto out;;
memcpy(result, cmd+5, 4);
if (write(eth_fd, result, 4) != (int) 4)
goto err;
DEBUG_MSG("Received command: setTCK, Replied with");
DEBUG_MSG(cmd+5);
break;
} else if (memcmp(cmd, "sh", 2) == (int) 0) {
if (!StreamRead(eth_fd, cmd, 4) )
goto out;
} else {
jtag_eth_err = 3;
goto err;
}
err:
switch(jtag_eth_err) {
case 1: ERROR_MSG("Failed to write XVCInfo");
case 2: ERROR_MSG("Failed to write setSCK");
case 3: ERROR_MSG("Invaild cmd");
}
return false;
out:
return true;
```
###### tags: `Regular Meeting` `DeWei`