diff options
author | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-02-05 18:43:49 +0000 |
---|---|---|
committer | andrewfish <andrewfish@6f19259b-4bc3-4df7-8a09-765794883524> | 2010-02-05 18:43:49 +0000 |
commit | 3aa4215f72528d6f2ac3fc5830c68d5105491d71 (patch) | |
tree | 1f14c1789bccb6bf20d80a020a0149be8e9789a6 /BeagleBoardPkg/Tools | |
parent | e18fa167215e24421735a2d421d5c6208054f003 (diff) | |
download | edk2-3aa4215f72528d6f2ac3fc5830c68d5105491d71.tar.gz edk2-3aa4215f72528d6f2ac3fc5830c68d5105491d71.tar.bz2 edk2-3aa4215f72528d6f2ac3fc5830c68d5105491d71.zip |
Update so Windows build works like Cygwin buid
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9940 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'BeagleBoardPkg/Tools')
-rw-r--r-- | BeagleBoardPkg/Tools/generate_image.c | 3 | ||||
-rwxr-xr-x | BeagleBoardPkg/Tools/replace.c | 35 |
2 files changed, 30 insertions, 8 deletions
diff --git a/BeagleBoardPkg/Tools/generate_image.c b/BeagleBoardPkg/Tools/generate_image.c index c1aebfef57..65351380c8 100644 --- a/BeagleBoardPkg/Tools/generate_image.c +++ b/BeagleBoardPkg/Tools/generate_image.c @@ -255,7 +255,7 @@ PrepareConfigurationHeader ( // Open data file DataFile = fopen(gDataFile, "rb"); if (DataFile == NULL) { - fprintf(stderr, "Can't open data file %s.\n", gOutputImageFile); + fprintf(stderr, "Can't open data file %s.\n", gDataFile); exit(1); } @@ -394,7 +394,6 @@ main ( default: abort (); } - printf ("\n%d(%x) - %s %s", i, TwoArg, argv[i], TwoArg ? argv[i+1] : &argv[i][2]); } } diff --git a/BeagleBoardPkg/Tools/replace.c b/BeagleBoardPkg/Tools/replace.c index d26d127481..8e09d9a6a1 100755 --- a/BeagleBoardPkg/Tools/replace.c +++ b/BeagleBoardPkg/Tools/replace.c @@ -26,6 +26,16 @@ typedef struct { char *Replace;
} MATCH_PAIR;
+void
+Usage (char *Name)
+{
+ printf ("\n%s OldFile NewFile MatchString ReplaceString [MatchString2 ReplaceString2]*\n", Name);
+ printf (" OldFile - Must be arg[1] File to search for MatchStrings\n");
+ printf (" NewFile - Must be arg[2] File where MatchString has been replaced with ReplaceString\n");
+ printf (" MatchString & ReplaceString. Required arguments.\n");
+ printf (" More MatchString/ReplaceString pairs are supported.\n");
+}
+
//
// argv[1] - Old File
// argv[2] - New File
@@ -44,10 +54,11 @@ main (int argc, char **argv) int Found;
if (argc < 5) {
- // Need at least two files and two strings
+ fprintf (stderr, "Need at least two files and one Match/Replacement string pair\n");
+ Usage (argv[0]);
return -1;
} else if ((argc % 2) == 0) {
- // Match and Replace string must come in pairs
+ fprintf (stderr, "Match and Replace string must come in pairs\n");
return -4;
}
@@ -55,6 +66,7 @@ main (int argc, char **argv) fseek (In, 0, SEEK_END);
InFileSize = ftell (In);
if (InFileSize == 0) {
+ fprintf (stderr, "Could not open %s\n", argv[1]);
return -6;
}
fseek (In, 0, SEEK_SET);
@@ -62,11 +74,11 @@ main (int argc, char **argv) Out = fopen (argv[2], "w+");
if ((In == NULL) || (Out == NULL)) {
+ fprintf (stderr, "Could not open %s\n", argv[2]);
return -2;
}
MaxMatch = (argc - 2)/2;
- printf ("\nMaxMatch = %d:%d\n", MaxMatch, argc);
Match = calloc (MaxMatch, sizeof (MATCH_PAIR));
if (Match == NULL) {
return -7;
@@ -76,7 +88,6 @@ main (int argc, char **argv) Match[n].Match = argv[3 + n*2];
Match[n].MatchSize = strlen (argv[3 + n*2]);
Match[n].Replace = argv[3 + n*2 + 1];
-printf ("%s > %s\n", Match[n].Match, Match[n].Replace);
if (Match[n].MatchSize > MaxLenKey) {
// Max size of match/replace string pair
MaxLenKey = Match[n].MatchSize;
@@ -91,6 +102,13 @@ printf ("%s > %s\n", Match[n].Match, Match[n].Replace); return -5;
}
+ // Search for a match by reading every possition of the file
+ // into a buffer that is as big as the maximum search key size.
+ // Then we can search the keys for a match. If no match
+ // copy the old file character to the new file. If it is a match
+ // then copy the replacement string into the output file.
+ // This code assumes the file system is smart and caches the
+ // file in a buffer. So all the reads don't really hit the disk.
InFilePos = 0;
while (InFilePos < (InFileSize - MinLenKey)) {
fseek (In, InFilePos, SEEK_SET);
@@ -98,9 +116,7 @@ printf ("%s > %s\n", Match[n].Match, Match[n].Replace); for (i = 0, Found = FALSE;i < MaxMatch; i++) {
if (ReadCount >= Match[i].MatchSize) {
if (!memcmp (Key, Match[i].Match, Match[i].MatchSize)) {
- printf ("Found [%s] @ %u\n", Match[i].Match, InFilePos);
InFilePos += (Match[i].MatchSize - 1);
- printf ("InFilePos = %u", InFilePos);
fputs (Match[i].Replace, Out);
Found = TRUE;
break;
@@ -114,10 +130,17 @@ printf ("%s > %s\n", Match[n].Match, Match[n].Replace); InFilePos++;
}
+ // We stoped searching when we got to the point that we could no longer match.
+ // So the last few bytes of the file are not copied in the privous loop
+ fseek (In, InFilePos, SEEK_SET);
+ while ((c = fgetc (In)) != EOF) {
+ fputc (c, Out);
+ }
fclose (In);
fclose (Out);
free (Key);
+ free (Match);
return 0;
}
|