Eustáquio Rangel

Desenvolvedor, pai, metalhead, ciclista

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!




Comentários

Comentários fechados.

Sem nenhum comentário.

Artigos anteriores