mescc: Mes C Library: Support GNU Tar: Add creat, mknod.
authorJan Nieuwenhuizen <janneke@gnu.org>
Fri, 12 Jul 2019 09:56:58 +0000 (11:56 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Fri, 12 Jul 2019 09:56:58 +0000 (11:56 +0200)
* include/linux/x86_64/syscall.h (SYS_mknod): New macro.
* include/linux/x86/syscall.h (SYS_mknod): New macro.
* lib/linux/mknod.c: New file.
* build-aux/configure-lib.sh (libc_gnu_SOURCES): Add it.
* include/sys/stat.h (mknod): Declare it.
* include/fcntl.h (creat): New macro.

build-aux/configure-lib.sh
include/fcntl.h
include/linux/x86/syscall.h
include/linux/x86_64/syscall.h
include/sys/stat.h
lib/linux/mknod.c [new file with mode: 0644]

index 0831f210d23c6afc9df9d68a89357e387b2333ce..ea9edee063d4b55ea8f9004c5928250db1217b68 100644 (file)
@@ -312,6 +312,7 @@ lib/linux/kill.c
 lib/linux/link.c
 lib/linux/lstat.c
 lib/linux/mkdir.c
+lib/linux/mknod.c
 lib/linux/nanosleep.c
 lib/linux/pipe.c
 lib/linux/readlink.c
index 148d5ea65c95dd322c60e8e27fa70c70155842a5..f29d56acccd03d9e11bf24fbbf437b097eb0ee76 100644 (file)
@@ -48,6 +48,7 @@
 #define F_GETFL 3
 #define F_SETFL 4
 
+#define creat(file_name, mode) open (file_name, O_WRONLY | O_CREAT | O_TRUNC, mode)
 int dup (int old);
 int dup2 (int old, int new);
 int fcntl (int filedes, int command, ...);
index 620a8b7dcdd2eb12ca86eabd9ce0c3d9d5c80266..e8de351a74a59af9ae39837dcac0df52eb8267e2 100644 (file)
@@ -86,5 +86,6 @@
 // tar
 #define SYS_symlink   0x53
 #define SYS_readlink  0x55
+#define SYS_mknod     0x0e
 
 #endif // __MES_LINUX_X86_SYSCALL_H
index 10c3f31b16532eb78cea39312601ed7324d9310a..36ef06bc885df6ab9a47e64632dc4f7f139ed3cc 100644 (file)
@@ -83,5 +83,6 @@
 // tar
 #define SYS_symlink   0x58
 #define SYS_readlink  0x59
+#define SYS_mknod     0x85
 
 #endif // __MES_LINUX_X86_64_SYSCALL_H
index 6db244969000b9fc29d82f81e62bd210c3b59a3d..891f31c8c082b986d288a915c7bdd2c374fbf8ed 100644 (file)
@@ -85,6 +85,7 @@ struct stat
 int chmod (char const *file_name, mode_t mode);
 int fstat (int filedes, struct stat *buf);
 int mkdir (char const *file_name, mode_t mode);
+int mknod (char const *file_name, mode_t mode, dev_t dev);
 int chown (char const *file_name, uid_t owner, gid_t group);
 int rmdir (char const *file_name);
 int stat (char const *file_name, struct stat *buf);
diff --git a/lib/linux/mknod.c b/lib/linux/mknod.c
new file mode 100644 (file)
index 0000000..8339f7a
--- /dev/null
@@ -0,0 +1,29 @@
+/* -*-comment-start: "//";comment-end:""-*-
+ * GNU Mes --- Maxwell Equations of Software
+ * Copyright © 2018,2019 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+ *
+ * This file is part of GNU Mes.
+ *
+ * GNU Mes is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * GNU Mes is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Mes.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/syscall.h>
+#include <syscall.h>
+#include <sys/stat.h>
+
+int
+mknod (char const *file_name, mode_t mode, dev_t dev)
+{
+  return _sys_call3 (SYS_mknod, (long) file_name, (long) mode, (long) dev);
+}