Created
June 20, 2014 09:36
-
-
Save jsfaint/8f486a3ceb14e6b21dea to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*++ | |
Module Name: | |
write_ver.c | |
Abstract: | |
Add version string in wrp file header for VSC7398. | |
A part of auto provision function implement. | |
Author: | |
jason ([email protected]) Dec-01-2009 | |
Compile: | |
compatible with ansi c, you can compile this tool with any ansi C Compiler. | |
--*/ | |
#include <stdio.h> | |
#include <memory.h> | |
#include <stdlib.h> | |
/* | |
* struct of wrp file head. (32 bytes) | |
0x00 - 0x03: unsigned long signature; //image signature, 1234567820H | |
0x04 : unsigned char header_len; //image address | |
0x05 : unsigned char header_version; | |
0x06 - 0x07: unsigned short file_checksum; //file_checksum; | |
0x08 - 0x0B: unsigned long file_len; | |
0x0C : unsigned char file_type; | |
0xOD : unsigned char header_checksum_adjust; | |
0x0E - 0x0F: unsigned short chip_part_no; | |
0x10 0x1F: unsigned char kernel_version; | |
*/ | |
#define VERSION_OFFSET 0x10 | |
long getfilesize(char *filename); | |
int main(int argc, char** argv) | |
{ | |
char version_filename[] = "..\\src\\config\\version.c"; | |
char szPrefix[] = "const uchar far kernel_version [] = \""; | |
char* buf = NULL; | |
char* start = NULL; | |
char* end = NULL; | |
FILE *fp = NULL, *fp_ver = NULL; | |
char version[16]; | |
if (argc <2) { | |
puts("Bad arguments!\nPlease exec as follow: write_ver d:\\lutnup8.wrp"); | |
exit(0); | |
} | |
fp = fopen(argv[1], "r+"); | |
if (fp == NULL) | |
{ | |
printf("fopen \"%s\" failed.\n", argv[1]); | |
exit(0); | |
} | |
long filesize = getfilesize(version_filename); | |
fp_ver = fopen(version_filename, "r"); | |
if (fp_ver == NULL) { | |
puts("open version.c failed."); | |
exit(0); | |
} | |
buf = (char*)malloc(filesize); | |
if (buf == NULL) | |
{ | |
puts("malloc memory failed\n"); | |
exit(0); | |
} | |
fread(buf, filesize, 1, fp_ver); //load version.c to buf. | |
start = (char*)strstr(buf, szPrefix); //search szPrefix | |
end = (char*)strstr(start, "\";"); //search the end double quotation marks. | |
*end = 0x00; | |
memset(version, 0, sizeof(version)); | |
memcpy(version, start+strlen(szPrefix)+1, (end-start)); | |
/*write Kennel version.*/ | |
fseek(fp, VERSION_OFFSET, SEEK_SET); | |
fprintf(fp, "%s", version); | |
fclose(fp); | |
fclose(fp_ver); | |
return 0; | |
} | |
long getfilesize(char *filename) | |
{ | |
FILE *fp; | |
long lRet; | |
if ((fp = fopen(filename, "r")) == NULL) | |
return 0; | |
fseek(fp, 0, SEEK_END); | |
lRet = ftell(fp); | |
fclose(fp); | |
return lRet; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment