#include <apt-pkg/strutl.h>
#include <apt-pkg/hashes.h>
#include <apt-pkg/configuration.h>
+#include "aptmethod.h"
#include <stddef.h>
#include <iostream>
char *free;
MemBlock *next;
- MemBlock(size_t size) : size(size), next(NULL)
+ explicit MemBlock(size_t size) : size(size), next(NULL)
{
free = start = new char[size];
}
size_t add_len; /* bytes */
char *add;
- Change(size_t off)
+ explicit Change(size_t off)
{
offset = off;
del_cnt = add_cnt = add_len = 0;
}
};
-class RredMethod : public pkgAcqMethod {
+class RredMethod : public aptMethod {
private:
bool Debug;
return true;
}
- bool Configuration(std::string Message) APT_OVERRIDE
- {
- if (pkgAcqMethod::Configuration(Message) == false)
- return false;
-
- DropPrivsOrDie();
-
- return true;
- }
-
public:
- RredMethod() : pkgAcqMethod("2.0",SingleInstance | SendConfig), Debug(false) {}
+ RredMethod() : aptMethod("rred", "2.0",SingleInstance | SendConfig), Debug(false) {}
};
int main(int argc, char **argv)
{
int i;
bool just_diff = true;
+ bool test = false;
Patch patch;
if (argc <= 1) {
return Mth.Run();
}
- if (argc > 1 && strcmp(argv[1], "-f") == 0) {
+ // Usage: rred -t input output diff ...
+ if (argc > 1 && strcmp(argv[1], "-t") == 0) {
+ just_diff = false;
+ test = true;
+ i = 4;
+ } else if (argc > 1 && strcmp(argv[1], "-f") == 0) {
just_diff = false;
i = 2;
} else {
}
}
- if (just_diff) {
+ if (test) {
+ FileFd out, inp;
+ std::cerr << "Patching " << argv[2] << " into " << argv[3] << "\n";
+ inp.Open(argv[2], FileFd::ReadOnly,FileFd::Extension);
+ out.Open(argv[3], FileFd::WriteOnly | FileFd::Create, FileFd::Extension);
+ patch.apply_against_file(out, inp);
+ } else if (just_diff) {
FileFd out;
out.OpenDescriptor(STDOUT_FILENO, FileFd::WriteOnly | FileFd::Create);
patch.write_diff(out);