[C con Clase] Error glibc y escaneo de directorios.

Sergio sbgaster en gmail.com
Sab Ene 23 13:13:26 CET 2010


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.

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.
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.

Aquí envió el código a ver si alguien me puede decir cual es el error.


 #include <glib.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main ( int argc ,char *argv[] )
{


//variables
GDir   *dir        = NULL;
GDir   *new_dir        = NULL;
gchar  *name_dir    = NULL;
gchar  *name_sub_dir    = NULL;
GError *error        = NULL;
gchar  *path        = NULL;

//comprobar argumentos
if (argc < 2 )
    {
    printf ( "Usaje:\nNombre del programa lib_1 " );
    printf ( "seguido del argumento ( directorio a escanear ).\n" );
    return;
    }

path = ( gchar * ) malloc ( sizeof ( argv ) );
strcpy ( path ,argv[1] );

//abrir directorio y comprobar errores
dir = g_dir_open ( path, 0, &error );
if ( error )
    {
    printf ( "%s", error->message );
    g_clear_error ( &error );
    return -1;
    }

//mientras name_dir contenga algun valor
do
    {
    name_dir = g_dir_read_name ( dir );
    if ( g_file_test ( name_dir, G_FILE_TEST_IS_DIR ) )
        {
        printf ( "%s\n", name_dir );
        new_dir = g_dir_open ( name_dir, 0, &error );
        if ( error )
            {
            printf ( "%s", error->message );
            g_clear_error ( &error );
            return -1;
            }
        //mientras name_sub_dir contenga algun valor
        do
            {
            name_sub_dir = g_dir_read_name ( new_dir );
            if ( g_file_test ( name_sub_dir, G_FILE_TEST_IS_DIR ) ||
name_sub_dir != NULL )
                {
                printf ( "\t%s\n", name_sub_dir );
                }
            }while ( name_sub_dir );
        }
    } while ( name_dir );
free ( path );
return 0;
}

Como digo si arranco el programa con:

$./lib_1 /home/sergio

me muestra los directorios que hay incluidos los ocultos y los archivos pero
si le pongo:

$./lib_1 /usr

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 ) )
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.

Por cierto utilizo linux para compilar:

gcc -g  `pkg-config --cflags --libs glib-2.0`  lib_1.c -o lib_1

Pues nada mas si alguien me explica el error lo agradecería mucho.

Saludos.


PD. Magnifica lista por cierto.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20100123/61d94612/attachment.html>


Más información sobre la lista de distribución Cconclase