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

[Lost] [Patch] libc - mkstemp



! 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.