File:  [Isaki's NoNo m68k/m88k emulator] / nono / lib / autofd.h
Revision 1.1.1.5 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:05:57 2026 UTC (2 months, 3 weeks ago) by root
Branches: MAIN, Isaki
CVS tags: v027, HEAD
nono 1.7.0

/*
 * 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.
 */

//
// autofd
//

#pragma once

#include <unistd.h>

// 自動変数みたいな生存期間を持つディスクリプタ
class autofd
{
 public:
	autofd() {
		fd = -1;
	}
	autofd(int fd_) {
		fd = fd_;
	}

	~autofd() {
		Close();
	}

	autofd& operator=(int fd_) {
		fd = fd_;
		return *this;
	}
	operator int() const {
		return fd;
	}

	// 明示的にクローズする
	int Close() {
		int rv = 0;
		if (Valid()) {
			rv = close(fd);
			fd = -1;
		}
		return rv;
	}

	// fd が有効なら true を返す
	bool Valid() const {
		return (fd >= 0);
	}

 private:
	int fd;
};

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.