FileInfoBlock->fib_EntryType - Abfrage nach Verzeichnis

Ihr habt ein Problem mit C++ oder anderen Sprachen ? Dann seit Ihr in diesem Forum genau richtig! Hier können alle Fragen gestellt werden, die mit Programmierung (MorphOS, Linux, BeOS, BSD,...) zu tun haben.

Moderatoren: analogkid, roschmyr

ShawnBaxe
Stammgast
Stammgast
Beiträge: 23
Registriert: 02 Dez 2008, 00:20

FileInfoBlock->fib_EntryType - Abfrage nach Verzeichnis

Beitragvon ShawnBaxe » 18 Okt 2013, 15:19

Wenn ich das richtig verstehe, sollte doch der Wert von fib_EntryType kleiner 0 bei Dateien, und größer 0 bei Verzeichnissen sein, oder? Scheint aber - zumindest unter MorphOS - irgendwie nicht zu funktionieren. Hier mal der Code, um den es geht:

Code: Alles auswählen

   /*********************************************
   ** ListDoubleClickHook
   **********************************************
   ** Check file type and trigger the
   ** appropriate action (e.g. enter directory).
   *********************************************/
   HOOKPROTONO(ListDoubleClickFunc, void, APTR *data)
   {
      Object *list = (Object *) *data;
      struct FileInfoBlock *fib;
      char *path;
      BPTR lock;

      GetAttr(MUIA_Dirlist_Path, list, &path);

      lock = Lock((STRPTR)path, ACCESS_READ);

      if(lock == NULL)
      {
         MUI_Request(NULL, NULL, 0, "Error", "_Ok", "Unable to lock dir!");
      }

      fib = (struct FileInfoBlock *)Examine(lock, fib);

      if(fib->fib_EntryType < 0)
      {
         /* We have a file here... */
      }
      else
      {
         /* We have a directory... */
         AddPart((STRPTR)path, fib->fib_FileName, sizeof(char *));
         SetAttrs(list, MUIA_Dirlist_Directory, path);
      }

      UnLock(lock);
   }
   MakeStaticHook(ListDoubleClickHook, ListDoubleClickFunc);


Dieser Hook wird aufgerufen, wenn ich einen Doppelklick auf einen Eintrag in einem MUI DirlistObject durchführe. Seltsamerweise versucht die Dirlist auch beim Doppelklick auf eine Datei das Verzeichnis zu wechseln. Geht bei Dateien natürlich schief - Resultat ist eine leere Liste. Bei Verzeichnissen bekomme ich, wie gewünscht, deren Inhalt angezeigt. Hat jemand eine Idee?

Thore
Blue Morpho
Blue Morpho
Beiträge: 2631
Registriert: 30 Jul 2006, 18:09
Wohnort: Reutlingen
Kontaktdaten:

Re: FileInfoBlock->fib_EntryType - Abfrage nach Verzeichnis

Beitragvon Thore » 18 Okt 2013, 17:54

Zuerst ein Bug:
Wenn lock == NULL ist, dann öffnet zwar dein Requester, aber danach macht er einfach weiter. Dann crasht es beim Examine.

Zweiter Fehler:
Examine liefert einen BOOL Wert zurück.

Besser ist es, einen if-Block einzuführen mit:

if(Examine(lock, fib)){
if(fib->fib_EntryType < 0)
{
...
}
}

Funktionierts dann?
http://www.disk-doktor.de

ShawnBaxe
Stammgast
Stammgast
Beiträge: 23
Registriert: 02 Dez 2008, 00:20

Re: FileInfoBlock->fib_EntryType - Abfrage nach Verzeichnis

Beitragvon ShawnBaxe » 18 Okt 2013, 18:18

Jawohl - jetzt tut es :) Danke Dir. Hab da wohl den Returntype von Examine vergurkt. Und das mit dem Abbruch im Falle eines gescheiterten Lock() hab ich auch korrigiert - auch dafür Danke :)


Zurück zu „Code-Küche“



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast