LINUX.ORG.RU

errno и траблы при использовании errno в .so библиотеке


0

1

привет.

продолжая все то же(хуки), столкнулся со следующей проблемой: если проверка условий для конкретного хука не пройдена, я в хуковой .so устанавливаю errno в EPERM. это работает.

проблема отображена ниже:

int main() {
   int rc0 = remove("/bin/ls");
   perror("remove(rc0)"); // тут выведет что надо: remove(rc0): Operation not permitted

   int rc1 = remove("test.txt");
   perror("remove(rc1)"); // а вот тут ошибочка. выведет: remove(rc0): Operation not permitted
      // но при этом rc1 == 0
}
т.е. получается так, что когда я из хука устанавливаю errno, создается еще одна копия errno?

подскажите, как исправить?

★★★

это. сделай так:

int main() {
   int rc1 = remove("test.txt");
   perror("remove(rc1)"); 
}

Ты удивишься.

DELIRIUM ☆☆☆☆☆
()

Маны читать-то иногда полезно.

Its value is significant only when the return value of the call indicated an error

geekless ★★
()

что исправить? всё работает как надо.

nanoolinux ★★★★
()

чудо, ты стандарт читало? там англицким по белому написано, что стандартная функция при успешном выполнении не имеет права менять errno.

arsi ★★★★★
()

Это ты тут оправдывался о нечитани манов, якобы ты С-кодер?

anonymous
()
Ответ на: комментарий от arsi

чудо, ты стандарт читало? там англицким по белому написано, что стандартная функция при успешном выполнении не имеет права менять errno.

a function that succeeds is allowed to change errno.

geekless ★★
()
Ответ на: комментарий от arsi

хм… хотя да, библиотечная функция может установить errno в !0 даже в случае успеха… был неправ. но на всякий случай: glibc и uclibc так не делают :)

arsi ★★★★★
()

таки да, все правильно. вопрос закрыт. спасибо.

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