Título: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Thelord en 1 Octubre 2010, 18:28 pm Hola, buen día a todos.
Intento compilar Ettercap 0.7.3 pero al final me muestra el siguiente error: Código: cc1: warnings being treated as errors ec_linux.c: In function ‘disable_ip_forward’: ec_linux.c:44: error: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result ec_linux.c: In function ‘restore_ip_forward’: ec_linux.c:71: error: ignoring return value of ‘fscanf’, declared with attribute warn_unused_result ^Tifa^ comenta que _warn_unused_return solicita que las 2 funciones devuelvan algún valor, pero son funciones void. Aquí esta el post donde hace mención: Su error es referente a 2 funciones declaradas con el atributo _warn_unused_return_ que aparentemente no estan devolviendo nada para ser funciones, y por ende el atributo esta lanzando un aviso de que no estan estas 2 funciones devolviendo nada..... como este atributo deberia tratarse solo como warnings y continuar con la compilacion pero esta simpatica linea : cc1: warnings being treated as errors Ya especifica que si hay warnings.. pues tratalos como error, y tratarlos como error es No compilar. Abre el archivo linux.c especificamente dentro de estas 2 funciones : disable_ip_forward() restore_ip_forward() Que estan cerca de la linea 44 y 71 como te indica ahi... Puedes postear el codigo de ambas? Te recomiendo que los postees en el subforo de programacion de C/C++ ya que aqui podran ayudarte mas que en este subforo de Linux. Ya que tu problema no es de configuracion o Linux en si, sino de una aplicacion que no compila porque su apreciado codigo tiene atributos incluidos (Fuera mas facil quitarlos todos de los archivos cabeceras y que el compilador No chequee nada y compile, pero esto es falta de etica para un programador ;D ) En fin como te dije abre las 2 funciones anteriores, copia el codigo de estas en el foro de C/C++ y expon tu error que no puedes compilar por x atributos declarados, y que no quieres quitar los atributos (Que es probable que te den esa solucion que es la mas facil) sino que tu quieres que estas funciones obligatoriamente retornen un valor ;) Esto en el archivo: ec_linux.c , les marco la línea 44 ;) Código: void disable_ip_forward(void) { FILE *fd; fd = fopen("/proc/sys/net/ipv4/ip_forward", "r"); ON_ERROR(fd, NULL, "failed to open /proc/sys/net/ipv4/ip_forward"); /*Esta es la línea 44 jeje */ fscanf(fd, "%c", &saved_status); fclose(fd); DEBUG_MSG("disable_ip_forward: old value = %c", saved_status); fd = fopen("/proc/sys/net/ipv4/ip_forward", "w"); ON_ERROR(fd, NULL, "failed to open /proc/sys/net/ipv4/ip_forward"); fprintf(fd, "0"); fclose(fd); atexit(restore_ip_forward); } static void restore_ip_forward(void) { FILE *fd; char current_status; /* no modification needed */ if (saved_status == '0') return; /* read the current status to know if we need to modify it */ fd = fopen("/proc/sys/net/ipv4/ip_forward", "r"); ON_ERROR(fd, NULL, "failed to open /proc/sys/net/ipv4/ip_forward"); fscanf(fd, "%c", ¤t_status); fclose(fd); DEBUG_MSG("ATEXIT: restore_ip_forward: curr: %c saved: %c", current_status, saved_status); if (current_status == saved_status) { DEBUG_MSG("ATEXIT: restore_ip_forward: does not need restoration"); return; } fd = fopen("/proc/sys/net/ipv4/ip_forward", "w"); if (fd == NULL) { FATAL_ERROR("ip_forwarding was disabled, but we cannot re-enable it now.\n" "remember to re-enable it manually\n"); } fprintf(fd, "%c", saved_status); fclose(fd); DEBUG_MSG("ATEXIT: restore_ip_forward: restore to %c", saved_status); } Al parecer ^Tifa^ tiene muy claro el problema, el detalle es que no se como solucionarlo y siento que ya le invertí mucho tiempo a la instalación de Ettercap (mas de 5 horas) que no quisiera ver perdido ese tiempo ;D Ayuda, please. Gracias y un saludo. Título: Re: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Eternal Idol en 2 Octubre 2010, 11:48 am Yo imagino que se podra compilar deshabilitando ESE warning o TODOS los warnings, sino no entiendo que ese codigo este disponible. Asi que en realidad no deberias tocar el codigo sino la forma de generarlo (makefile o lo que sea).
Si queres cambiar el codigo declara una variable de tipo int al principio de ambas funciones y asignale el resultado de la funcion fscanf. Ej. para la primera: Código
PD. Encima es C ... Título: Re: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Thelord en 2 Octubre 2010, 23:59 pm Gracias.
Listo, se salta ese error. Ahora lo que marca es lo siguiente: Código: cc1: warnings being treated as errors ec_text.c: In function ‘text_input’: ec_text.c:186: error: ignoring return value of ‘fgets’, declared with attribute warn_unused_result ec_text.c: In function ‘text_run_plugin’: ec_text.c:441: error: ignoring return value of ‘fgets’, declared with attribute warn_unused_result ec_text.c: In function ‘text_visualization’: ec_text.c:561: error: ignoring return value of ‘scanf’, declared with attribute warn_unused_result Al parecer es el mismo detalle, así que intente hacer lo mismo en el archivo correspondiente, pero me resulto el siguiente error(Solo cambie la línea 186): Código: cc1: warnings being treated as errors ec_text.c: In function ‘text_input’: ec_text.c:186: error: assignment makes integer from pointer without a cast Parece no ser la misma solución, o tal vez me falto algo. Título: Re: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Eternal Idol en 3 Octubre 2010, 00:06 am El tipo de retorno de fgets no es el mismo que el de fscanf (int):
http://www.cplusplus.com/reference/clibrary/cstdio/fgets/ Título: Re: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Thelord en 4 Octubre 2010, 21:43 pm Hey gracias.
Tomando en cuenta lo que me comentas, me eh desecho de algunos warnings, en el caso de _warn_unused_return_ . Pero ahora tengo un Warning distinto: Código: cc1: warnings being treated as errors Este el el código de la función 'text_print_packet':ec_text_display.c: In function ‘text_print_packet’: ec_text_display.c:58: error: pointer targets in passing argument 2 of ‘regexec’ differ in signedness Código
No se si es necesario colocar toda la función, pero en estas líneas es donde me aparece el Warning. Gracias y un saludo. Título: Re: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Eternal Idol en 6 Octubre 2010, 19:15 pm ¿No es hora de averiguar como generar el ejecutable sin cambiar el codigo?
Título: Re: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Thelord en 9 Octubre 2010, 03:46 am ¿No es hora de averiguar como generar el ejecutable sin cambiar el codigo? Jeje, tienes razón. Veré de que forma solucionarlo, cuando lo haga les aviso. Gracias y un saludo. Título: Re: _warn_unused_return_ pide retorno de valor en funcion void Publicado por: Foxy Rider en 9 Octubre 2010, 04:21 am Podrías sacar el flag -Werror de la compilación para que los warnings no se consideren errores ...
Saludos P.S : Mismo tema tratado aquí (https://foro.elhacker.net/hacking_linuxunix/ettercap_hibrido_al_borde_de_la_locura-t306693.0.html) |