Skip to content
Snippets Groups Projects
zipfile.h 762 B
Newer Older
Vicki Pfau's avatar
Vicki Pfau committed
#pragma once

#include "zip.h"

#include <memory>
#include <string>
#include <vector>

namespace Retro {

class Zip {
public:
	class File {
	public:
		File(zip_t*, const std::string& name, zip_file_t* = nullptr);
		File(File&) = delete;

		std::string readline();
		ssize_t read(void* buffer, size_t size);
		ssize_t write(const void* buffer, size_t size);

	private:
Vicki Pfau's avatar
Vicki Pfau committed
		void close();
		friend class Zip;

Vicki Pfau's avatar
Vicki Pfau committed
		zip_t* m_zip;
		zip_file_t* m_file;
		std::vector<char> m_buffer;
		std::string m_name;
	};

	Zip(const std::string& path);
	~Zip();

	bool open(bool readwrite = false);
	void close();

	File* openFile(const std::string& name, bool write = false);

private:
	std::string m_path;

	zip_t* m_zip = nullptr;
	std::vector<std::unique_ptr<File>> m_files;
};
}