[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH 3/3] libc: POSIX: readlink()



On Sat, May 02 21:32, Kevin Wolf wrote:
> + libc: POSIX: readlink()
> ---
>  src/modules/include/unistd.h |    2 ++
>  src/modules/lib/posix/link.c |   29 +++++++++++++++++++++++++++++
>  2 files changed, 31 insertions(+), 0 deletions(-)
> 
> diff --git a/src/modules/include/unistd.h b/src/modules/include/unistd.h
> index 152d7ca..010b0e2 100644
> --- a/src/modules/include/unistd.h
> +++ b/src/modules/include/unistd.h
> @@ -71,6 +71,8 @@ int unlink(const char* filename);
>  /// Ein Verzeichnis loeschen
>  int rmdir(const char* dirname);
>  
> +/// Ziel eines symbolischen Links auslesen
> +ssize_t readlink(const char* path, char* buf, size_t bufsize);
>  
>  // Makros fuer access()
>  #define F_OK 1
> diff --git a/src/modules/lib/posix/link.c b/src/modules/lib/posix/link.c
> index 804cf05..745c17a 100644
> --- a/src/modules/lib/posix/link.c
> +++ b/src/modules/lib/posix/link.c
> @@ -28,6 +28,7 @@
>  
>  #include <unistd.h>
>  #include <errno.h>
> +#include <stdio.h>
>  
>  /**
>   * Einen Hardlink erstellen.
> @@ -44,3 +45,31 @@ int link(const char* oldpath, const char* newpath)
>      return -1;
>  }
>  
> +
> +/**
> + * Liest den Zielpfad einsr symbolischen Links aus.

KRITIKEL!

> + *
> + * Der ausgelesene Pfad wird nicht nullterminiert. Wenn der Zielpfad laenger
> + * als die Puffergroesse ist, wird der Pfad abgeschnitten.
> + *
> + * @param path Pfad zum symbolischen Link
> + * @param buf Puffer, in dem der Dateiname gespeichert werden soll

Wenn wir schon beim Kommentar kritisieren sind, kann ich hier auch noch
ein "Zielpfad" statt "Dateiname" vorschlagen. ;-)

> + * @param bufsiz Laenge des Puffers
> + *
> + * @return Laenge des Zielpfads; -1 im Fehlerfall.
> + */
> +ssize_t readlink(const char* path, char* buf, size_t bufsize)
> +{
> +    ssize_t len;
> +
> +    FILE* file = fopen(path, "lr");
> +    if (file == NULL) {
> +        errno = EIO;
> +        return -1;
> +    }
> +
> +    len = fread(buf, 1, bufsize, file);
> +    fclose(file);
> +
> +    return len;
> +}

Sonst ist das wohl oder übel in Ordnung so. ;-)

-- 
Antoine Kaufmann
<toni@xxxxxxxxxxxxxxxx>

Attachment: pgpPF2YCNYMmj.pgp
Description: PGP signature