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:
pgpTWzeT6VgFU.pgp
Description: PGP signature