En los proyectos de software libre es común que los programadores envíen sus parches de código fuente a un proyecto dado. La forma de aplicar los parches es con el comando patch.
Supongamos que tenemos el siguiente código fuente:
fib1.c
#include
#include
/* Find the nth Fibonacci number. */
static int fib(int n)
{
if (n <= 0)
return 0;
if (n == 1)
return 1;
return fib(n - 1) + fib(n - 2);
}
int main(int argc, char** argv)
{
if (argc < 2) {
fprintf(stderr, "Need an argument.\n");
return 1;
}
printf("%d\n", fib(atoi(argv[1])));
return 0;
}
Y hemos recibido el siguiente parche:
fib-linear-time.patch
--- fib1.c
+++ fib2.c
@@ -4,11 +4,17 @@
/* Find the nth Fibonacci number. */
static int fib(int n)
{
- if (n <= 0)
- return 0;
- if (n == 1)
- return 1;
- return fib(n - 1) + fib(n - 2);
+ int prev = 1;
+ int current = 0;
+ int i;
+
+ for (i = 0; i < n; i++) {
+ int next = current + prev;
+ prev = current;
+ current = next;
+ }
+
+ return current;
}
int main(int argc, char** argv)
Para aplicar el parche simplemente debemos ejecutar la siguiente orden desde consola:
patch < fib-linear-time.patch
Y con esto nuestro archivo fib1.c quedaría de la forma siguiente:
fib1.c
#include
#include
/* Find the nth Fibonacci number. */
static int fib(int n)
{
int prev = 1;
int current = 0;
int i;
for (i = 0; i < n; i++) {
int next = current + prev;
prev = current;
current = next;
}
return current;
}
int main(int argc, char** argv)
{
if (argc < 2) {
fprintf(stderr, "Need an argument.\n");
return 1;
}
printf("%d\n", fib(atoi(argv[1])));
return 0;
}