summaryrefslogtreecommitdiff
path: root/apt-private
diff options
context:
space:
mode:
Diffstat (limited to 'apt-private')
-rw-r--r--apt-private/private-list.cc12
-rw-r--r--apt-private/private-main.cc9
-rw-r--r--apt-private/private-main.h1
-rw-r--r--apt-private/private-output.cc21
4 files changed, 33 insertions, 10 deletions
diff --git a/apt-private/private-list.cc b/apt-private/private-list.cc
index b69002103..e85aaf64c 100644
--- a/apt-private/private-list.cc
+++ b/apt-private/private-list.cc
@@ -37,28 +37,20 @@ struct PackageSortAlphabetic /*{{{*/
return (l_name < r_name);
}
};
- /*}}}*/
-class PackageNameMatcher : public Matcher /*{{{*/
+
+class PackageNameMatcher : public Matcher
{
-#ifdef PACKAGE_MATCHER_ABI_COMPAT
-#define PackageMatcher PackageNameMatchesFnmatch
-#endif
public:
PackageNameMatcher(const char **patterns)
{
for(int i=0; patterns[i] != NULL; ++i)
{
std::string pattern = patterns[i];
-#ifdef PACKAGE_MATCHER_ABI_COMPAT
- APT::CacheFilter::PackageNameMatchesFnmatch *cachefilter = NULL;
- cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern);
-#else
APT::CacheFilter::PackageMatcher *cachefilter = NULL;
if(_config->FindB("APT::Cmd::Use-Regexp", false) == true)
cachefilter = new APT::CacheFilter::PackageNameMatchesRegEx(pattern);
else
cachefilter = new APT::CacheFilter::PackageNameMatchesFnmatch(pattern);
-#endif
filters.push_back(cachefilter);
}
}
diff --git a/apt-private/private-main.cc b/apt-private/private-main.cc
index 2d3965172..668b1733a 100644
--- a/apt-private/private-main.cc
+++ b/apt-private/private-main.cc
@@ -8,9 +8,18 @@
#include <iostream>
#include <string.h>
#include <unistd.h>
+#include <signal.h>
#include <apti18n.h>
+
+void InitSignals()
+{
+ // Setup the signals
+ signal(SIGPIPE,SIG_IGN);
+}
+
+
void CheckSimulateMode(CommandLine &CmdL)
{
// simulate user-friendly if apt-get has no root privileges
diff --git a/apt-private/private-main.h b/apt-private/private-main.h
index 23d4aca68..a03bf4441 100644
--- a/apt-private/private-main.h
+++ b/apt-private/private-main.h
@@ -6,5 +6,6 @@
class CommandLine;
APT_PUBLIC void CheckSimulateMode(CommandLine &CmdL);
+APT_PUBLIC void InitSignals();
#endif
diff --git a/apt-private/private-output.cc b/apt-private/private-output.cc
index 757999167..7f3eef6c2 100644
--- a/apt-private/private-output.cc
+++ b/apt-private/private-output.cc
@@ -22,6 +22,7 @@
#include <iostream>
#include <langinfo.h>
#include <unistd.h>
+#include <signal.h>
#include <apti18n.h>
/*}}}*/
@@ -32,8 +33,24 @@ std::ostream c0out(0);
std::ostream c1out(0);
std::ostream c2out(0);
std::ofstream devnull("/dev/null");
+
+
unsigned int ScreenWidth = 80 - 1; /* - 1 for the cursor */
+// SigWinch - Window size change signal handler /*{{{*/
+// ---------------------------------------------------------------------
+/* */
+static void SigWinch(int)
+{
+ // Riped from GNU ls
+#ifdef TIOCGWINSZ
+ struct winsize ws;
+
+ if (ioctl(1, TIOCGWINSZ, &ws) != -1 && ws.ws_col >= 5)
+ ScreenWidth = ws.ws_col - 1;
+#endif
+}
+ /*}}}*/
bool InitOutput() /*{{{*/
{
if (!isatty(STDOUT_FILENO) && _config->FindI("quiet", -1) == -1)
@@ -47,6 +64,10 @@ bool InitOutput() /*{{{*/
if (_config->FindI("quiet",0) > 1)
c1out.rdbuf(devnull.rdbuf());
+ // deal with window size changes
+ signal(SIGWINCH,SigWinch);
+ SigWinch(0);
+
if(!isatty(1))
{
_config->Set("APT::Color", "false");