Bug in Filesearchmodule

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Bug in Filesearchmodule

Beitrag von Bebu » Mo Aug 09, 2010 10:31 pm

Ich suche eine Idee für ein etwas ungewöhnliches Problem im Filesearchmodul von Dedupe: Bekanntlicherweise kann man Verknüpfungen so einrichten, dass sie auf sich selbst zeigen und man sich dann in einer Endlosschleife wiederfindet wenn man solche Verknüpfungen rekursiv durchsucht. Die wird zwar früher oder später unterbrochen, wahrscheinlich weil irgend ein Maximalwert überschritten wird, aber das ganze verbrät unnötig viel Rechenzeit. Ich habe bisher keine Möglichkeit gefunden, solche Verknüpfungen von normalen Verzeichnissen zu unterscheiden. Zumindest unter Gnome sind das keine Symbolischen Links und per stat nicht voneinander zu unterscheiden. Ich suche Ideen. Ich könnte natürlich festlegen, das ein bestimmter Verzeichnisname nur so und so oft hintereinander vorkommen darf, aber auch das ist nicht richtig effizient und verbrät auch zusätzliche Rechenzeit. Außerdem kann man nie wissen, wie tief mancher seine Dateien unter "Neuen Ordnern" vergräbt. Schon mal jemand ein ähnliches Problem gehabt und gelöst?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: Bug in Filesearchmodule

Beitrag von Kerli » Mo Aug 09, 2010 11:31 pm

Das ist ein typischer Fall für readlink (zb. readlink() nach POSIX). Wenn das Ziel gleich dem Link ist dann hat man eine Schleife. Problematischer wird es aber wohl bei indirekt selbst verlinkten Verknüpfungen also mit weiteren Links dazwischen bevor man wieder zum Ausgangslink oder auch einem anderen Link in der Kette kommt.
Eine Möglichkeit das zu erkennen wäre es zb. alle Links in der Kette merken und beim ersten auftreten eines bekannten Elements abbrechen. Eine Begrenzung der Länge der Kette sollte für den Fall der Fälle aber trotzdem vorhanden sein.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Bug in Filesearchmodule

Beitrag von cloidnerux » Di Aug 10, 2010 6:47 am

Ist es nicht sinnvoller Links auszulassen, da sie entweder auf Ordner verweisen, die nicht im Betrachtungsspektrum liegen oder sowieso durchsucht werden?
Oder Links die auf Diesnte oder entfernte Resourcen verweisen?
Redundanz macht wiederholen unnötig.
quod erat expectandum

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Bug in Filesearchmodule

Beitrag von Bebu » Di Aug 10, 2010 11:30 am

cloidnerux hat geschrieben:Ist es nicht sinnvoller Links auszulassen, da sie entweder auf Ordner verweisen, die nicht im Betrachtungsspektrum liegen oder sowieso durchsucht werden?
Oder Links die auf Diesnte oder entfernte Resourcen verweisen?
So war es geplant, ich kämpfe aber mit dem Problem, das mir mein Programm keine Verzeichnisverknüpfungen von normalen Ordnern unterscheiden kann. Ich habe mir gerade mal den Quellcode der Coreutils von GNU runtergeladen und versuche mal dort ein bisschen was dazuzulernen, da klappts ja problemlos
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Bug in Filesearchmodule

Beitrag von Bebu » Di Aug 10, 2010 12:52 pm

So dieser Bug ist gefixt. Verknüpfungen werden nun korrekt erkannt und dann ausgefiltert. Die Lösung war die Verwendung von lstat() statt stat().
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

Antworten