Problema con S_ISDIR () el resultado en C (tal vez porque stat () no está configurando su estructura correctamente?)

Quiero que mi programa tome un directorio, luego imprima el contenido de ese directorio e indique si cada elemento es un directorio o no. Si le doy un directorio que contiene los archivos F1.txt y F2.txt y las carpetas D1, D2 y D3, debería imprimir:

F1.txt no es directorio
F2.txt no es directorio
D1 es directorio
D2 es directorio
D3 es directorio

char* curr[100];
DIR* dirp = opendir(name);
struct dirent* x;
struct stat fstat;

//go to each file til readdir gives NULL
while((x = readdir(dirp)) != NULL) {

  //store name of file
  curr[0] = (x -> d_name);

  //ignore files starting with "."
  if(*curr[0] == '.')
    continue;

  //set status
  stat(curr[0], &fstat);

  //print file name
  printf("%s", *curr);

  //check if it's a directory and print result
  if(S_ISDIR(fstat.st_mode))
    printf(" is directory\n");
  else
    printf(" is not directory\n");
}

Esto se imprime diciendo que todos los archivos no son directorios. Si elimino la parte que ignora los archivos que comienzan con ".", Dice F1.txt, F2.txt y D1 no son directorios, y eso., D2, D3 y .. son directorios (en ese orden). Eso me hace pensar que el problema está en la llamada a las estadísticas en lugar de mi uso de las macros, pero estoy bastante confundido aquí, así que no lo sé.

Respuestas a la pregunta(1)

Su respuesta a la pregunta