tweaks.
This commit is contained in:
parent
a7382d7f86
commit
7280f8106e
6
Makefile
6
Makefile
|
@ -1,10 +1,10 @@
|
|||
CXX = clang++
|
||||
LINK.o = $(LINK.cc)
|
||||
CXXFLAGS += -std=c++11 -g
|
||||
CXXFLAGS += -std=c++11 -g -Wall
|
||||
|
||||
dot_clean: dot_clean.o mapped_file.o
|
||||
dot_clean: dot_clean.o mapped_file.o applefile.h defer.h
|
||||
|
||||
mapped_file.o : mapped_file.cpp mapped_file.h
|
||||
mapped_file.o : mapped_file.cpp mapped_file.h unique_resource.h
|
||||
|
||||
dot_clean.o : dot_clean.cpp mapped_file.h applefile.h
|
||||
|
||||
|
|
|
@ -155,7 +155,6 @@ typedef struct ASEntry ASEntry;
|
|||
#define AS_MSDOSINFO 12 /* MS-DOS file info, attributes, etc */
|
||||
#define AS_AFPNAME 13 /* Short name on AFP server */
|
||||
#define AS_AFPINFO 14 /* AFP file info, attrib., etc */
|
||||
|
||||
#define AS_AFPDIRID 15 /* AFP directory ID */
|
||||
|
||||
/* matrix of entry types and their usage:
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
#ifndef __defer_h__
|
||||
#define __defer_h__
|
||||
|
||||
#include <utility>
|
||||
#include <functional>
|
||||
|
||||
|
||||
class defer {
|
||||
public:
|
||||
typedef std::function<void()> FX;
|
||||
defer() = default;
|
||||
|
||||
defer(FX &&fx) : _fx(std::forward<FX>(fx)) {}
|
||||
defer(const defer &) = delete;
|
||||
defer(defer &&) = default;
|
||||
defer & operator=(const defer &) = delete;
|
||||
defer & operator=(defer &&) = default;
|
||||
|
||||
void cancel() { _fx = nullptr; }
|
||||
~defer() { if (_fx) _fx(); }
|
||||
private:
|
||||
FX _fx;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -6,6 +6,7 @@
|
|||
#include <algorithm>
|
||||
#include <functional>
|
||||
#include <system_error>
|
||||
#include <utility>
|
||||
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
@ -23,6 +24,7 @@
|
|||
|
||||
#include "applefile.h"
|
||||
#include "mapped_file.h"
|
||||
#include "defer.h"
|
||||
|
||||
|
||||
std::vector<std::string> unlink_list;
|
||||
|
@ -63,25 +65,6 @@ void throw_errno(const std::string &what) {
|
|||
}
|
||||
|
||||
|
||||
class defer {
|
||||
public:
|
||||
typedef std::function<void()> FX;
|
||||
defer() = default;
|
||||
|
||||
defer(FX fx) : _fx(fx) {}
|
||||
defer(const defer &) = delete;
|
||||
defer(defer &&) = default;
|
||||
defer & operator=(const defer &) = delete;
|
||||
defer & operator=(defer &&) = default;
|
||||
|
||||
void cancel() { _fx = nullptr; }
|
||||
~defer() { if (_fx) _fx(); }
|
||||
private:
|
||||
FX _fx;
|
||||
};
|
||||
|
||||
|
||||
|
||||
void one_file(const std::string &data, const std::string &rsrc) noexcept try {
|
||||
|
||||
struct stat rsrc_st;
|
||||
|
@ -119,9 +102,15 @@ void one_file(const std::string &data, const std::string &rsrc) noexcept try {
|
|||
|
||||
|
||||
|
||||
if (header->magicNum != APPLEDOUBLE_MAGIC || header->versionNum != 0x00020000)
|
||||
if (header->magicNum != APPLEDOUBLE_MAGIC)
|
||||
throw_not_apple_double();
|
||||
|
||||
// v 2 is a super set of v1. v1 had type 7 for os-specific info, since split into
|
||||
// separate entries.
|
||||
if (header->versionNum != 0x00010000 && header->versionNum != 0x00020000)
|
||||
throw_not_apple_double();
|
||||
|
||||
|
||||
if (header->numEntries * sizeof(ASEntry) + sizeof(ASHeader) > mf.size()) throw_eof();
|
||||
|
||||
ASEntry *begin = (ASEntry *)(mf.data() + sizeof(ASHeader));
|
||||
|
@ -139,11 +128,9 @@ void one_file(const std::string &data, const std::string &rsrc) noexcept try {
|
|||
|
||||
});
|
||||
|
||||
std::for_each(begin, end, [&mf,fd](ASEntry &e){
|
||||
|
||||
for (auto iter = begin; iter != end; ++iter) {
|
||||
const auto &e = *iter;
|
||||
|
||||
if (e.entryLength == 0) continue;
|
||||
if (e.entryLength == 0) return;
|
||||
switch(e.entryID) {
|
||||
|
||||
#if 0
|
||||
|
@ -185,8 +172,7 @@ void one_file(const std::string &data, const std::string &rsrc) noexcept try {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
if (!_p) unlink_list.push_back(rsrc);
|
||||
|
|
|
@ -6,22 +6,6 @@
|
|||
#include "unique_resource.h"
|
||||
|
||||
namespace {
|
||||
class defer {
|
||||
public:
|
||||
typedef std::function<void()> FX;
|
||||
defer() = default;
|
||||
|
||||
defer(FX fx) : _fx(fx) {}
|
||||
defer(const defer &) = delete;
|
||||
defer(defer &&) = default;
|
||||
defer & operator=(const defer &) = delete;
|
||||
defer & operator=(defer &&) = default;
|
||||
|
||||
void cancel() { _fx = nullptr; }
|
||||
~defer() { if (_fx) _fx(); }
|
||||
private:
|
||||
FX _fx;
|
||||
};
|
||||
|
||||
void throw_error(int error) {
|
||||
throw std::system_error(error, std::system_category());
|
||||
|
@ -32,8 +16,6 @@ namespace {
|
|||
throw std::system_error(error, std::system_category(), what);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
|
|
@ -18,6 +18,7 @@ public:
|
|||
unique_resource(T t, D d): _pair(t,d), _active(true)
|
||||
{}
|
||||
|
||||
|
||||
~unique_resource() {
|
||||
reset();
|
||||
}
|
||||
|
@ -40,14 +41,14 @@ public:
|
|||
|
||||
void reset(T t) {
|
||||
reset();
|
||||
_active = true;
|
||||
_pair.first = t;
|
||||
_active = true;
|
||||
}
|
||||
|
||||
void reset(T t, D d) {
|
||||
reset();
|
||||
_active = true;
|
||||
_pair = std::make_pair(t, d);
|
||||
_active = true;
|
||||
}
|
||||
|
||||
void reset() {
|
||||
|
@ -59,10 +60,6 @@ public:
|
|||
|
||||
T release() {
|
||||
_active = false;
|
||||
return _pair.first;;
|
||||
}
|
||||
|
||||
T get() {
|
||||
return _pair.first;
|
||||
}
|
||||
|
||||
|
@ -70,6 +67,16 @@ public:
|
|||
return _active;
|
||||
}
|
||||
|
||||
|
||||
T& get() {
|
||||
return _pair.first;
|
||||
}
|
||||
|
||||
const T& get() const {
|
||||
return _pair.first;
|
||||
}
|
||||
|
||||
|
||||
D& get_deleter() {
|
||||
return _pair.second;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue