Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: juligarc10 en 23 Octubre 2019, 13:56 pm



Título: conflictin types for ... (pasando mode_t como parámetro)
Publicado por: juligarc10 en 23 Octubre 2019, 13:56 pm
Hola gente. Estoy realizando un pequeño proyecto en el cual pretendo imitar un shell, y en este caso estoy diseñando una función que haga lo mismo que el 'ls -li' del shell de Linux. Esta entre otras cosas me debe de mostrar los permisos del archivo. Para ello uso una función, a la cual se le pasa por parámetro un mode_t, y me tendría que devolver un puntero de tipo char (string).
Al intentar compilar el proyecto me da un error de 'conflicting types for 'ConvierteModo2''.
Las librerías necesarias las tengo todas importadas, y he probado a hacerlo de forma chapuza, y no modularizada, y así funciona. De aquí saco como conclusión que el problema viene de que no me lee bien el mode_t pasado por parámetro, o bien que el hecho de que me devuelva un puntero a un char falle en algún punto...

Este es el código:

Código:
else if (strcmp( entrada,"info")==0) {
        char *permiso;
        char path[]="/home/julian/Escritorio/a.out";
        permiso=(char *) malloc (12);
        struct stat a;
        stat(/*trim(tr[1])*/path, &a);
        permiso=ConvierteModo2(a.st_mode);

Código:
char *ConvierteModo2 (mode_t m) {
    static char permisos[12];
    strcpy (permisos,"---------- ");
    permisos[0]=TipoFichero(m);
    if (m&S_IRUSR) permisos[1]='r';  /*propietario*/
    if (m&S_IWUSR) permisos[2]='w';
    if (m&S_IXUSR) permisos[3]='x';
    if (m&S_IRGRP) permisos[4]='r';   /*grupo*/
    if (m&S_IWGRP) permisos[5]='w';
    if (m&S_IXGRP) permisos[6]='x';
    if (m&S_IROTH) permisos[7]='r';   /*resto*/
    if (m&S_IWOTH) permisos[8]='w';
    if (m&S_IXOTH) permisos[9]='x';
    if (m&S_ISUID) permisos[3]='s';  /*setuid, setgid y stickybit*/
    if (m&S_ISGID) permisos[6]='s';
    if (m&S_ISVTX) permisos[9]='t';
    return (permisos);
}

Alguien podría echarme una mano? Gracias de antemano.


Título: Re: conflictin types for ... (pasando mode_t como parámetro)
Publicado por: CalgaryCorpus en 24 Octubre 2019, 17:43 pm
Sugiero incluir los #include (relevantes) que estas usando.

Tal vez si construyes un programa minimo que muestre el error en vez de recortar pensando que lo que recortaste no tiene relevancia?