[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Lost] [PATCH] ! cdi/fs: In Verzeichnissen Dot- und Dotdot-Eintraege anlegen, damit auch taljeth gluecklich ist.
Am Montag, 20. Oktober 2008 21:38:17 schrieb Antoine Kaufmann:
> src/modules/cdi/lib/fs/lostio_if.c | 29 +++++++++++++++++++++++++++--
> 1 files changed, 27 insertions(+), 2 deletions(-)
>
> diff --git a/src/modules/cdi/lib/fs/lostio_if.c
> b/src/modules/cdi/lib/fs/lostio_if.c index f402776..030cded 100644
> --- a/src/modules/cdi/lib/fs/lostio_if.c
> +++ b/src/modules/cdi/lib/fs/lostio_if.c
> @@ -158,6 +158,17 @@ static bool fs_fill_dir(vfstree_node_t* node)
> for (i = 0; (cres = cdi_list_get(children, i)); i++) {
> handle_dirent(cres, node);
> }
> +
> + // Dot- und Dotdot-Eintraege erstellen
> + vfstree_create_child(node, ".", LOSTIO_TYPES_DIRECTORY, 0, stream,
> + LOSTIO_FLAG_BROWSABLE);
> + if (node->parent->data) {
Ohne den Code zu kennen: node->parent riecht nach einem Nullpointer. Oder was
steht da beim Wurzelverzeichnis drin?
> + // Nur wenn es sich nicht um das Root-Verzeichnis handelt
> wollen wir + // einen Dotdot-Eintrag
> + vfstree_create_child(node, "..", LOSTIO_TYPES_DIRECTORY, 0,
> + node->parent->data, LOSTIO_FLAG_BROWSABLE);
> + }
> +
> }
>
> return TRUE;
> @@ -518,6 +529,12 @@ int lostio_unlink_handler(lostio_filehandle_t* fh,
> const char* name)
> p();
>
> + // Dot- und Dotdot-Eintraege koennen nicht geloescht werden
> + if (!strcmp(name, ".") || !strcmp(name, "..")) {
> + result = -1;
> + goto out;
> + }
> +
> // Passender Kindknoten finden
> for (i = 0; (node = list_get_element_at(fh->node->children, i)); i++)
> { if (!strcmp(node->name, name)) {
> @@ -533,15 +550,23 @@ found:
>
> // Spezialfall: Es handelt sich um ein Verzeichnis. Das heisst es darf
> // nur geloescht werden wenn es keine Kind-Eintraege mehr hat.
> - if (stream->res->dir && list_size(node->children)) {
> + if (stream->res->dir && (list_size(node->children) > 2)) {
> result = -1;
> goto out;
> }
>
> // Sonst kann die Ressource geloescht werden.
> - if (cdi_remove_res(stream) || !vfstree_delete_child(fh->node, name)) {
> + if (cdi_remove_res(stream)) {
> result = -1;
> + goto out;
> + }
> +
> + // Dot- und Dotdot-Eintraege in einem Verzeichnis loeschen
> + if (list_size(node->children)) {
> + vfstree_delete_child(node, ".");
> + vfstree_delete_child(node, "..");
> }
> + vfstree_delete_child(fh->node, name);
>
> out:
> v();
> --
> 1.5.6.4
>
> _______________________________________________
> Lost mailing list
> Lost@xxxxxxxxxx
> http://list.tyndur.org/mailman/listinfo/lost