! libc: Fehlende deklaration fuer mktemp + libc: mkstemp()
Index: trunk/src/modules/include/unistd.h =================================================================== --- trunk.orig/src/modules/include/unistd.h +++ trunk/src/modules/include/unistd.h @@ -109,6 +109,12 @@ off_t lseek(int fd, off_t offset, int wh /// Unix-Datei schliessen int close(int fd); +/// Dateinamen fuer temporaere Datei erstellen +char* mktemp(char* template); + +/// Temporaere Datei anlegen +int mkstemp(char* template); + #ifndef CONFIG_LIBC_NO_STUBS /// Prozess klonen pid_t fork(void); Index: trunk/src/modules/lib/posix/mktemp.c =================================================================== --- trunk.orig/src/modules/lib/posix/mktemp.c +++ trunk/src/modules/lib/posix/mktemp.c @@ -36,6 +36,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <fcntl.h> #include <errno.h> /** @@ -86,3 +87,31 @@ char* mktemp(char* template) return template; } + +/** + * Temporaere Datei erstellen. Dabei wird so lange gesucht, bis eine gefunden + * wird, die noch nicht existiert. + * + * @param template Vorlage fuer den Dateinamen. Sie wird von der Funktion + * abgeandert. Am schluss muessen mindestens 6 X stehen. + * + * @return Dateideskriptor + */ +int mkstemp(char* template) +{ + int fd = -1; + size_t len = strlen(template); + char buf[len + 1]; + + while (fd == -1) { + strcpy(buf, template); + if (!mktemp(buf)) { + return fd; + } + + fd = open(buf, O_EXCL | O_CREAT); + } + + return fd; +} +
Attachment:
signature.asc
Description: This is a digitally signed message part.