LINUX.ORG.RU

Разобраться с .diff-ом и патчингом

 ,


0

1

Прислали на проверку патч устраняющий баг, следующего содержания:

diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 60f1ce5..8c89f06 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -210,8 +210,18 @@ static int ieee80211_change_mac(struct net_device *dev, void *addr)
                 return -EBUSY;
 
         ret = ieee80211_verify_mac(sdata->local, sa->sa_data);
-        if (ret)
-                return ret;
+        if (ret) {
+                struct ieee80211_sub_if_data *tmp;
+                unsigned num_ifcs = 0;
+
+                list_for_each_entry(tmp, &sdata->local->interfaces, list) {
+                        num_ifcs++;
+                }
+                if (num_ifcs > 1)
+                        return ret;
+
+                SET_IEEE80211_PERM_ADDR(&sdata->local->hw, sa->sa_data);
+        }
 
         ret = eth_mac_addr(dev, sa);

Сохранил, пытаюсь пропатчить:

# patch < iface.c.Kuba.diff 
patching file iface.c
Hunk #1 FAILED at 210.
1 out of 1 hunk FAILED -- saving rejects to file iface.c.rej
Ошибка. Ниже функция подлежащая патчингу:
static int ieee80211_change_mac(struct net_device *dev, void *addr)
{
	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
	struct sockaddr *sa = addr;
	int ret;

	if (ieee80211_sdata_running(sdata))
		return -EBUSY;

	ret = ieee80211_verify_mac(sdata->local, sa->sa_data);
	if (ret)
		return ret;

	ret = eth_mac_addr(dev, sa);

	if (ret == 0)
		memcpy(sdata->vif.addr, sa->sa_data, ETH_ALEN);

	return ret;
}

Помощь не нужна. Уже внёс изменения вручную, но хотелось бы понять почему не сработало на автомате.

[offtop] Почему-то при предпросмотре, а наверное и после постинга ничего не изменится, не работает подсветка синтаксиса при таком оформлении вышеприведенных листингов: [code=Diff]...[/code], [code=C]...[/code]. В профиле «TeX Paragraphs», в чём ошибка? [/offtop]


Ответ на: комментарий от marvin_yorke
# patch -p 1 < iface.c.Kuba.diff 
can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
|index 60f1ce5..8c89f06 100644
|--- a/net/mac80211/iface.c
|+++ b/net/mac80211/iface.c
--------------------------
File to patch: iface.c
patching file iface.c
Hunk #1 FAILED at 210.
1 out of 1 hunk FAILED -- saving rejects to file iface.c.rej
varchar
() автор топика
Ответ на: комментарий от marvin_yorke
# pwd
/usr/src/linux/net/mac80211
# cd ../..
# pwd
/usr/src/linux
# du -hs net
60M     net
# patch -p 1 < /long-path-to/iface.c.Kuba.diff 
patching file net/mac80211/iface.c
Hunk #1 FAILED at 210.
1 out of 1 hunk FAILED -- saving rejects to file net/mac80211/iface.c.rej
varchar
() автор топика

Вот 209-я 210-я строки из iface.c:

if (ieee80211_sdata_running(sdata))
		return -EBUSY;
похоже там лишние пробелы/табы, или диффу на это должно быть пофиг?

varchar
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.