Date: Sat, 16 Mar 2002 17:32:54 -0500 From: "Clark C . Evans" <cce@clarkevans.com> To: hackers@freebsd.org Subject: simple binary patch utility (for iso cdrom images) Message-ID: <20020316173254.A15494@doublegemini.com>
index | next in thread | raw e-mail
I looked around for quite a while for a simple program
to do a binary patch on an iso cdrom image. I was hoping
that I could use "bvi" or similar binary editor, but it
wasn't clear how I could get them to do simple string
replacement. So, I wrote one and am putting it in the
public domain, I hope someone finds it useful.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE -1
#define FALSE 0
long findstr(FILE *file, const char *str,int len) {
long r = 0;
int c = 0;
int i = 0;
while(-1 != (c=fgetc(file))) {
if(str[i] == ((char)c)) {
i++;
if(i<len) continue;
/* found it */
return r;
}
if(i) {
/* bad match */
r += i;
i = 0;
}
r += 1;
}
return 0;
}
void main(int argc, char **argv)
{
FILE *file;
const char *find, *repl;
long pos, len;
if ( argc < 4 )
{
printf("Usage: %s file find replace\n",argv[0]);
return;
}
find = argv[2];
repl = argv[3];
len = strlen(find);
if ( len != strlen(repl) || len < 1)
{
printf("Find string is not same size as replace string.\n");
return;
}
file = fopen( argv[1], "r+b");
if ( file == NULL )
{
printf("Unable to open file <%s>\n", argv[1]);
return;
}
pos = findstr(file,find,len);
if (!pos)
{
printf("Unable to find string '%s'\n",find);
return;
}
fseek(file,pos,SEEK_SET);
fwrite(repl,1,len,file);
fclose( file );
}
--
Clark C. Evans Axista, Inc.
http://www.axista.com 800.926.5525
XCOLLA Collaborative Project Management Software
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020316173254.A15494>
