[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