1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#include <config.h>
#include <apt-pkg/configuration.h>
#include <apt-pkg/error.h>
#include <apt-pkg/fileutl.h>
#include <apt-private/private-utils.h>
#include <cstdlib>
#include <sstream>
#include <unistd.h>
// DisplayFileInPager - Display File with pager /*{{{*/
bool DisplayFileInPager(std::string const &filename)
{
pid_t Process = ExecFork();
if (Process == 0)
{
const char *Args[3];
Args[1] = filename.c_str();
Args[2] = NULL;
if (isatty(STDOUT_FILENO) == 1)
{
// likely installed, provided by sensible-utils
std::string const pager = _config->Find("Dir::Bin::Pager",
"sensible-pager");
Args[0] = pager.c_str();
execvp(Args[0],(char **)Args);
// lets try some obvious alternatives
Args[0] = getenv("PAGER");
if (Args[0] != NULL)
execvp(Args[0],(char **)Args);
Args[0] = "pager";
execvp(Args[0],(char **)Args);
}
// we could read the file ourselves, but… meh
Args[0] = "cat";
execvp(Args[0],(char **)Args);
exit(100);
}
// Wait for the subprocess
return ExecWait(Process, "pager", false);
}
/*}}}*/
// EditFileInSensibleEditor - Edit File with editor /*{{{*/
bool EditFileInSensibleEditor(std::string const &filename)
{
pid_t Process = ExecFork();
if (Process == 0)
{
// likely installed, provided by sensible-utils
std::string const editor = _config->Find("Dir::Bin::Editor",
"sensible-editor");
const char *Args[3];
Args[0] = editor.c_str();
Args[1] = filename.c_str();
Args[2] = NULL;
execvp(Args[0],(char **)Args);
// the usual suspects we can try as an alternative
Args[0] = getenv("VISUAL");
if (Args[0] != NULL)
execvp(Args[0],(char **)Args);
Args[0] = getenv("EDITOR");
if (Args[0] != NULL)
execvp(Args[0],(char **)Args);
Args[0] = "editor";
execvp(Args[0],(char **)Args);
exit(100);
}
// Wait for the subprocess
return ExecWait(Process, "editor", false);
}
/*}}}*/
time_t GetSecondsSinceEpoch() /*{{{*/
{
auto const source_date_epoch = getenv("SOURCE_DATE_EPOCH");
if (source_date_epoch == nullptr)
return time(nullptr);
time_t epoch;
std::stringstream ss(source_date_epoch);
ss >> epoch;
if (ss.fail() || !ss.eof())
{
_error->Warning("Environment variable SOURCE_DATE_EPOCH was ignored as it has an invalid value: \"%s\"",
source_date_epoch);
return time(nullptr);
}
return epoch;
}
/*}}}*/
|