Signed-off-by: Yonggang Luo <luoyongg...@gmail.com>
---
 lib/Makefile.am |  2 +-
 lib/system.c    | 87 +++++++++++++++++++++++++++++++++++++++++++++++++
 lib/system.h    | 59 ++++-----------------------------
 3 files changed, 94 insertions(+), 54 deletions(-)
 create mode 100644 lib/system.c

diff --git a/lib/Makefile.am b/lib/Makefile.am
index 42ddf5ae..7a50085b 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -35,7 +35,7 @@ noinst_LIBRARIES = libeu.a
 
 libeu_a_SOURCES = xasprintf.c xstrdup.c xstrndup.c xmalloc.c next_prime.c \
                  crc32.c crc32_file.c \
-                 color.c error.c printversion.c
+                 color.c error.c printversion.c system.c
 
 noinst_HEADERS = fixedsizehash.h libeu.h system.h dynamicsizehash.h list.h \
                 eu-config.h color.h printversion.h bpf.h \
diff --git a/lib/system.c b/lib/system.c
new file mode 100644
index 00000000..0fd28968
--- /dev/null
+++ b/lib/system.c
@@ -0,0 +1,87 @@
+/* Definitions for system functions.
+   Copyright (C) 2006-2011 Red Hat, Inc.
+   Copyright (C) 2022 Mark J. Wielaard <m...@klomp.org>
+   Copyright (C) 2022 Yonggang Luo <luoyongg...@gmail.com>
+   This file is part of elfutils.
+
+   This file is free software; you can redistribute it and/or modify
+   it under the terms of either
+
+     * the GNU Lesser General Public License as published by the Free
+       Software Foundation; either version 3 of the License, or (at
+       your option) any later version
+
+   or
+
+     * the GNU General Public License as published by the Free
+       Software Foundation; either version 2 of the License, or (at
+       your option) any later version
+
+   or both in parallel, as here.
+
+   elfutils 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 copies of the GNU General Public License and
+   the GNU Lesser General Public License along with this program.  If
+   not, see <http://www.gnu.org/licenses/>.  */
+
+#include "system.h"
+
+ssize_t
+pwrite_retry(int fd, const void *buf, size_t len, off_t off)
+{
+  ssize_t recvd = 0;
+
+  do
+    {
+      ssize_t ret = TEMP_FAILURE_RETRY (pwrite (fd, ((char *)buf) + recvd, len 
- recvd,
+          off + recvd));
+      if (ret <= 0)
+        return ret < 0 ? ret : recvd;
+
+      recvd += ret;
+    }
+  while ((size_t) recvd < len);
+
+  return recvd;
+}
+
+ssize_t
+write_retry(int fd, const void *buf, size_t len)
+{
+  ssize_t recvd = 0;
+
+  do
+    {
+      ssize_t ret = TEMP_FAILURE_RETRY (write (fd, ((char *)buf) + recvd, len 
- recvd));
+      if (ret <= 0)
+        return ret < 0 ? ret : recvd;
+
+      recvd += ret;
+    }
+  while ((size_t) recvd < len);
+
+  return recvd;
+}
+
+ssize_t
+pread_retry(int fd, void *buf, size_t len, off_t off)
+{
+  ssize_t recvd = 0;
+
+  do
+    {
+      ssize_t ret = TEMP_FAILURE_RETRY (pread (fd, ((char *)buf) + recvd, len 
- recvd,
+          off + recvd));
+      if (ret <= 0)
+        return ret < 0 ? ret : recvd;
+
+      recvd += ret;
+    }
+  while ((size_t) recvd < len);
+
+  return recvd;
+}
diff --git a/lib/system.h b/lib/system.h
index 264781c2..05b2d8f9 100644
--- a/lib/system.h
+++ b/lib/system.h
@@ -145,61 +145,14 @@ startswith (const char *str, const char *prefix)
 #define DEFFILEMODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)/* 0666 */
 #endif
 
-static inline ssize_t __attribute__ ((unused))
-pwrite_retry (int fd, const void *buf, size_t len, off_t off)
-{
-  ssize_t recvd = 0;
-
-  do
-    {
-      ssize_t ret = TEMP_FAILURE_RETRY (pwrite (fd, ((char *)buf) + recvd, len 
- recvd,
-                                               off + recvd));
-      if (ret <= 0)
-       return ret < 0 ? ret : recvd;
+ssize_t
+pwrite_retry (int fd, const void *buf, size_t len, off_t off);
 
-      recvd += ret;
-    }
-  while ((size_t) recvd < len);
-
-  return recvd;
-}
+ssize_t
+write_retry (int fd, const void *buf, size_t len);
 
-static inline ssize_t __attribute__ ((unused))
-write_retry (int fd, const void *buf, size_t len)
-{
-  ssize_t recvd = 0;
-
-  do
-    {
-      ssize_t ret = TEMP_FAILURE_RETRY (write (fd, ((char *)buf) + recvd, len 
- recvd));
-      if (ret <= 0)
-       return ret < 0 ? ret : recvd;
-
-      recvd += ret;
-    }
-  while ((size_t) recvd < len);
-
-  return recvd;
-}
-
-static inline ssize_t __attribute__ ((unused))
-pread_retry (int fd, void *buf, size_t len, off_t off)
-{
-  ssize_t recvd = 0;
-
-  do
-    {
-      ssize_t ret = TEMP_FAILURE_RETRY (pread (fd, ((char *)buf) + recvd, len 
- recvd,
-                                              off + recvd));
-      if (ret <= 0)
-       return ret < 0 ? ret : recvd;
-
-      recvd += ret;
-    }
-  while ((size_t) recvd < len);
-
-  return recvd;
-}
+ssize_t
+pread_retry (int fd, void *buf, size_t len, off_t off);
 
 /* The demangler from libstdc++.  */
 extern char *__cxa_demangle (const char *mangled_name, char *output_buffer,
-- 
2.36.1.windows.1

Reply via email to