elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  _warn_unused_return_ pide retorno de valor en funcion void
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: _warn_unused_return_ pide retorno de valor en funcion void  (Leído 4,291 veces)
Thelord

Desconectado Desconectado

Mensajes: 14


The Lord


Ver Perfil WWW
_warn_unused_return_ pide retorno de valor en funcion void
« 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", &current_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.



« Última modificación: 1 Octubre 2010, 19:15 pm por Thelord » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.904


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: _warn_unused_return_ pide retorno de valor en funcion void
« Respuesta #1 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
  1. void disable_ip_forward(void)
  2. {
  3.   FILE *fd;
  4.   int ir; //items read
  5.  
  6.   fd = fopen("/proc/sys/net/ipv4/ip_forward", "r");
  7.   ON_ERROR(fd, NULL, "failed to open /proc/sys/net/ipv4/ip_forward");
  8.  
  9.   ir = fscanf(fd, "%c", &saved_status);
  10. ...
  11.  

PD. Encima es C ...


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Thelord

Desconectado Desconectado

Mensajes: 14


The Lord


Ver Perfil WWW
Re: _warn_unused_return_ pide retorno de valor en funcion void
« Respuesta #2 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.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.904


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: _warn_unused_return_ pide retorno de valor en funcion void
« Respuesta #3 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/
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Thelord

Desconectado Desconectado

Mensajes: 14


The Lord


Ver Perfil WWW
Re: _warn_unused_return_ pide retorno de valor en funcion void
« Respuesta #4 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
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
Este el el código de la función 'text_print_packet':
Código
  1.   if (GBL_OPTIONS->regex &&
  2.       regexec(GBL_OPTIONS->regex, po->DATA.disp_data, 0, NULL, 0) != 0) {
  3.      return;
  4.   }
  5.  


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.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.904


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: _warn_unused_return_ pide retorno de valor en funcion void
« Respuesta #5 en: 6 Octubre 2010, 19:15 pm »

¿No es hora de averiguar como generar el ejecutable sin cambiar el codigo?
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Thelord

Desconectado Desconectado

Mensajes: 14


The Lord


Ver Perfil WWW
Re: _warn_unused_return_ pide retorno de valor en funcion void
« Respuesta #6 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.
En línea

Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: _warn_unused_return_ pide retorno de valor en funcion void
« Respuesta #7 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í
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Función que retorna el valor de retorno de otra función
Programación C/C++
naderST 7 3,890 Último mensaje 7 Diciembre 2011, 23:45 pm
por naderST
[Duda] Valor de retorno main
Programación C/C++
apoeti 3 2,522 Último mensaje 12 Septiembre 2012, 16:16 pm
por apoeti
valor de Retorno
Programación C/C++
<<<-Basura->>> 3 1,832 Último mensaje 2 Enero 2014, 22:50 pm
por amchacon
Ayuda convirtiendo puntero void a unsigned char y obtener su valor
Programación C/C++
harry_the_blogger 4 2,298 Último mensaje 5 Octubre 2014, 21:40 pm
por harry_the_blogger
Obtener valor de retorno de una función antes de preprocesar
Programación C/C++
Skali 6 1,260 Último mensaje 30 Julio 2018, 03:26 am
por Skali
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines