Why does patch not find this file?

stdcerr picture stdcerr · Dec 18, 2013 · Viewed 24.6k times · Source

I would like to apply a patch to the u-boot sources but some how, Linux doesn't let me. What I have:

reg@ubuntu:~/NextGen/trunk/FW/thirdparty/u-boot$ patch -p1 < ../u-boot/u-boot-2013.01-wr.patch 
can't find file to patch at input line 4
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff -uNr u-boot-2013.01/arch/powerpc/cpu/mpc85xx/cpu_init.c u-boot-2013.01.modified/arch/powerpc/cpu/mpc85xx/cpu_init.c
|--- u-boot-2013.01/arch/powerpc/cpu/mpc85xx/cpu_init.c 2013-01-15 13:47:42.000000000 -0800
|+++ u-boot-2013.01.modified/arch/powerpc/cpu/mpc85xx/cpu_init.c        2013-05-16 10:58:08.973906692 -0700
--------------------------
File to patch: ^C
reg@ubuntu:~/NextGen/trunk/FW/thirdparty/u-boot$ ls -l u-boot-2013.01/arch/powerpc/cpu/mpc85xx/cpu_init.c
-rw-r--r-- 1 reg reg 16745 Jan 15  2013 u-boot-2013.01/arch/powerpc/cpu/mpc85xx/cpu_init.c
reg@ubuntu:~/NextGen/trunk/FW/thirdparty/u-boot$ 

So why can it not find the file when it's perfectly at the right location? What's going on here?

Answer

that other guy picture that other guy · Dec 18, 2013

There are three file paths involved here:

  • The patch's original file: u-boot-2013.01/arch/powerpc/cpu/mpc85xx/cpu_init.c
  • The patch's target file: u-boot-2013.01.modified/arch/powerpc/cpu/mpc85xx/cpu_init.c
  • The stripped target file due to -p1: arch/powerpc/cpu/mpc85xx/cpu_init.c

Patch looks for the stripped target file, and it doesn't exist.

cd u-boot-2013.01 and then patch -p1 < ../../u-boot/u-boot-2013.01-wr.patch, and you should have more luck.