--- nono/lib/autofd.h 2026/04/29 17:04:48 1.1.1.1 +++ nono/lib/autofd.h 2026/04/29 17:05:57 1.1.1.5 @@ -1,9 +1,24 @@ +/* + * Copyright (C) 2020 Tetsuya Isaki + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + // -// nono -// Copyright (C) 2020 nono project -// Licensed under nono-license.txt +// autofd // +#pragma once + #include // 自動変数みたいな生存期間を持つディスクリプタ @@ -18,8 +33,7 @@ class autofd } ~autofd() { - if (fd >= 0) - close(fd); + Close(); } autofd& operator=(int fd_) { @@ -33,13 +47,18 @@ class autofd // 明示的にクローズする int Close() { int rv = 0; - if (fd >= 0) { + if (Valid()) { rv = close(fd); fd = -1; } return rv; } - public: + // fd が有効なら true を返す + bool Valid() const { + return (fd >= 0); + } + + private: int fd; };