#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <dirent.h>


/* Funktionsprototyp */
void blist();


int main()
{
  blist();

  return EXIT_SUCCESS;
}


void blist()
{
  DIR*           dir;
  struct dirent* entry;


  /* spool-Verzeichnis oeffnen */
  dir = opendir("spool");
  if(dir == NULL)
  {
    perror("blist: opendir");
    exit(EXIT_FAILURE);
  }


  /* In Schleife Verzeichniseintraege auslesen */
  while(1)
  {
    /* readdir liefert als Rueckgabewert NULL, wenn das Verzeichnis aus-
       gelesen wurde ODER ein Fehler aufgetreten ist. Um dies zu unter-
       scheiden wird vor jedem readdir-Aufruf errno auf 0 gesetzt.
       Im Fehlerfall ist der Rueckgabewert NULL und errno != 0. */
    errno = 0;
    entry = readdir(dir);
    if(entry == NULL)
    {
      if(errno != 0) /* Fehler */
      {
        perror("blist: readdir");
        exit(EXIT_FAILURE);
      }
      else break; /* Kein Fehler, sondern Verzeichnis ausgelesen,
                     while-Schleife verlassen */
    }

    /* Rueckgabewert entry != NULL */
    printf("%s\n", entry->d_name);
  }

  /* Verzeichnis schliessen */
  closedir(dir);
}
