Hola a todos, envió esta consulta a esta lista aun sabiendo que no es una pregunta referente a C++ ya que me tiene bastante loco y no consigo encontrar el error.<br><br>Estoy haciendo unas pruebas con glibc-2.0 y bueno me puse a hacer un pequeño programa para escanear un directorio, sin pretensiones, solo unas pruebas.<br>
El caso es que una vez acabado el programa puedo escanear mi directorio /home pero si introduzco cualquier otro directorio por ejemplo /usr no me imprime nada , como digo es un programa de prueba y solo escanea el primer directorio , no entra en los demás.<br>
<br>Aquí envió el código a ver si alguien me puede decir cual es el error.<br><br><br> #include <glib.h><br>#include <stdio.h><br>#include <string.h><br>#include <stdlib.h><br><br>int main ( int argc ,char *argv[] )<br>
{<br><br><br>//variables<br>GDir   *dir        = NULL;<br>GDir   *new_dir        = NULL;<br>gchar  *name_dir    = NULL;<br>gchar  *name_sub_dir    = NULL;<br>GError *error        = NULL;<br>gchar  *path        = NULL;<br>
<br>//comprobar argumentos<br>if (argc < 2 )<br>    {<br>    printf ( "Usaje:\nNombre del programa lib_1 " );<br>    printf ( "seguido del argumento ( directorio a escanear ).\n" );<br>    return;<br>
    }<br><br>path = ( gchar * ) malloc ( sizeof ( argv ) );<br>strcpy ( path ,argv[1] );<br><br>//abrir directorio y comprobar errores<br>dir = g_dir_open ( path, 0, &error );<br>if ( error )<br>    {<br>    printf ( "%s", error->message );<br>
    g_clear_error ( &error );<br>    return -1;<br>    }<br><br>//mientras name_dir contenga algun valor    <br>do <br>    {<br>    name_dir = g_dir_read_name ( dir );<br>    if ( g_file_test ( name_dir, G_FILE_TEST_IS_DIR ) )<br>
        {<br>        printf ( "%s\n", name_dir );<br>        new_dir = g_dir_open ( name_dir, 0, &error );<br>        if ( error )<br>            {<br>            printf ( "%s", error->message );<br>
            g_clear_error ( &error );<br>            return -1;<br>            }<br>        //mientras name_sub_dir contenga algun valor    <br>        do<br>            {<br>            name_sub_dir = g_dir_read_name ( new_dir );<br>
            if ( g_file_test ( name_sub_dir, G_FILE_TEST_IS_DIR ) || name_sub_dir != NULL )<br>                {<br>                printf ( "\t%s\n", name_sub_dir );<br>                }<br>            }while ( name_sub_dir );<br>
        }     <br>    } while ( name_dir );<br>free ( path );<br>return 0;<br>}<br><br>Como digo si arranco el programa con:<br><br>$./lib_1 /home/sergio<br><br>me muestra los directorios que hay incluidos los ocultos y los archivos pero si le pongo:<br>
<br>$./lib_1 /usr<br><br>no muestra nada , debugeando veo que la variable path recoge bien el valor pero que en la linea   if ( g_file_test ( name_dir, G_FILE_TEST_IS_DIR ) )<br>no devuelve true nunca aunque  la variable name_dir contenga un directorio y eso es lo que no entiendo porque con /home/sergio si funciona y porque con /usr no.<br>
<br>Por cierto utilizo linux para compilar:<br><br>gcc -g  `pkg-config --cflags --libs glib-2.0`  lib_1.c -o lib_1<br><br>Pues nada mas si alguien me explica el error lo agradecería mucho.<br><br>Saludos.<br><br><br>PD. Magnifica lista por cierto.<br>
<br><br>