X-Git-Url: http://git.ipfire.org/?a=blobdiff_plain;f=src%2Fbasic%2Ffd-util.h;h=2162537b80889e2776a9018b93b728565a110b8f;hb=db9ecf050165fd1033c6f81485917e229c4be537;hp=e75e9541037ddaa28632fbde8dde279310e7cd6f;hpb=6064de2de8734401669b787b68ebbf858d452cec;p=thirdparty%2Fsystemd.git
diff --git a/src/basic/fd-util.h b/src/basic/fd-util.h
index e75e9541037..2162537b808 100644
--- a/src/basic/fd-util.h
+++ b/src/basic/fd-util.h
@@ -1,25 +1,6 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
-/***
- This file is part of systemd.
-
- Copyright 2010 Lennart Poettering
-
- systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version.
-
- systemd 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
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see .
-***/
-
#include
#include
#include
@@ -33,7 +14,7 @@
int close_nointr(int fd);
int safe_close(int fd);
-void safe_close_pair(int p[]);
+void safe_close_pair(int p[static 2]);
static inline int safe_close_above_stdio(int fd) {
if (fd < 3) /* Don't close stdin/stdout/stderr, but still invalidate the fd by returning -1 */
@@ -42,7 +23,7 @@ static inline int safe_close_above_stdio(int fd) {
return safe_close(fd);
}
-void close_many(const int fds[], unsigned n_fd);
+void close_many(const int fds[], size_t n_fd);
int fclose_nointr(FILE *f);
FILE* safe_fclose(FILE *f);
@@ -72,7 +53,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DIR*, closedir);
int fd_nonblock(int fd, bool nonblock);
int fd_cloexec(int fd, bool cloexec);
-int close_all_fds(const int except[], unsigned n_except);
+int close_all_fds(const int except[], size_t n_except);
int same_fd(int a, int b);
@@ -94,13 +75,7 @@ enum {
int acquire_data_fd(const void *data, size_t size, unsigned flags);
-/* Hint: ENETUNREACH happens if we try to connect to "non-existing" special IP addresses, such as ::5 */
-#define ERRNO_IS_DISCONNECT(r) \
- IN_SET(r, ENOTCONN, ECONNRESET, ECONNREFUSED, ECONNABORTED, EPIPE, ENETUNREACH)
-
-/* Resource exhaustion, could be our fault or general system trouble */
-#define ERRNO_IS_RESOURCE(r) \
- IN_SET(r, ENOMEM, EMFILE, ENFILE)
+int fd_duplicate_data_fd(int fd);
int fd_move_above_stdio(int fd);
@@ -118,4 +93,16 @@ static inline int make_null_stdio(void) {
_fd_; \
})
+/* Like free_and_replace(), but for file descriptors */
+#define CLOSE_AND_REPLACE(a, b) \
+ ({ \
+ int *_fdp_ = &(a); \
+ safe_close(*_fdp_); \
+ *_fdp_ = TAKE_FD(b); \
+ 0; \
+ })
+
+
int fd_reopen(int fd, int flags);
+
+int read_nr_open(void);