Blog do TaQ

bsdiff e bspatch: diff e patch binários!

Publicado em Developer

Puxa, essa eu não conhecia. Um diff e patch que funcionam em arquivos binários! Fique sabendo deles através do post do Jesse Ruderman sobre o Firefox 1.5, pois é o que está sendo utilizado para as upgrades incrementais.

Fiz um teste aqui, com um programa pequeno. Peguei os fontes na página do projeto, compilei, instalei e fiz um "hello, world!" da vida, em C:

#include <stdio.h>

int main(void){
printf("Hello world!\n");
return 0;
}

Compilei e pedi para salvar o executável como helloworld:

[taq@~/code/c]gcc -o helloworld helloworld.c 
[taq@~/code/c]./helloworld 
Hello world!

Agora alterei um pouco o fonte:

#include <stdio.h>

int main(void){
printf("Hello new world!\n");
return 0;
}

Compilei e pedi para salvar o executável como hellonewworld:

[taq@~/code/c]gcc -o hellonewworld helloworld.c 
[taq@~/code/c]./hellonewworld 
Hello new world!

Agora que vem a parte legal: acionei o bsdiff

para criar um patch binário entre helloworld e hellonewworld, o qual gravei como hello.patch, apliquei em helloworld, salvando o resultado como helloworld (sobreescrevendo o original), e rodei:
[taq@~/code/c]bsdiff helloworld hellonewworld hello.patch
[taq@~/code/c]bspatch helloworld helloworld hello.patch
[taq@~/code/c]./helloworld
Hello new world!

Uau! Patch binário aplicado!


Tags:


Comentários

Sem nenhum comentário.

comments powered by Disqus

Twitter