]>
git.saurik.com Git - apt.git/blob - cmdline/apt-dump-solver.cc
1 // -*- mode: cpp; mode: fold -*-
3 /* #####################################################################
5 dummy solver to get quickly a scenario file out of APT
7 ##################################################################### */
9 // Include Files /*{{{*/
10 #include <apt-pkg/edsp.h>
21 // ShowHelp - Show a help screen /*{{{*/
22 // ---------------------------------------------------------------------
24 static bool ShowHelp() {
25 ioprintf(std::cout
, "%s %s (%s)\n", PACKAGE
, PACKAGE_VERSION
, COMMON_ARCH
);
27 "Usage: apt-dump-solver\n"
29 "apt-dump-solver is a dummy solver who just dumps its input to the\n"
30 "file specified in the environment variable APT_EDSP_DUMP_FILENAME and\n"
31 "exists with a proper EDSP error.\n"
33 " This dump has lost Super Cow Powers.\n";
37 int main(int argc
,const char *argv
[]) /*{{{*/
39 // we really don't need anything
42 if (argc
> 1 && (strcmp(argv
[1], "--help") == 0 || strcmp(argv
[1],"-h") == 0 ||
43 strcmp(argv
[1],"-v") == 0 || strcmp(argv
[1],"--version") == 0)) {
49 if (stdoutfd
.OpenDescriptor(STDOUT_FILENO
, FileFd::WriteOnly
| FileFd::BufferedWrite
, true) == false)
52 char const * const filename
= getenv("APT_EDSP_DUMP_FILENAME");
53 if (filename
== NULL
|| strlen(filename
) == 0)
55 EDSP::WriteError("ERR_NO_FILENAME", "You have to set the environment variable APT_EDSP_DUMP_FILENAME\n"
56 "to a valid filename to store the dump of EDSP solver input in.\n"
57 "For example with: export APT_EDSP_DUMP_FILENAME=/tmp/dump.edsp", stdoutfd
);
61 RemoveFile(argv
[0], filename
);
63 if (input
.OpenDescriptor(STDIN_FILENO
, FileFd::ReadOnly
) == false ||
64 output
.Open(filename
, FileFd::WriteOnly
| FileFd::Create
| FileFd::Exclusive
, 0600) == false ||
65 CopyFile(input
, output
) == false || input
.Close() == false || output
.Close() == false)
67 std::ostringstream out
;
68 out
<< "Writing EDSP solver input to file '" << filename
<< "' failed!\n";
69 _error
->DumpErrors(out
);
70 EDSP::WriteError("ERR_WRITE_ERROR", out
.str(), stdoutfd
);
74 EDSP::WriteError("ERR_JUST_DUMPING", "I am too dumb, i can just dump!\nPlease use one of my friends instead!", stdoutfd
);