Browse Source

Fix missing ScreenWidth check in apt.cc

tags/debian/1.0.3
Michael Vogt 7 years ago
parent
commit
3163087b04
5 changed files with 38 additions and 19 deletions
  1. +9
    -0
      apt-private/private-main.cc
  2. +1
    -0
      apt-private/private-main.h
  3. +21
    -0
      apt-private/private-output.cc
  4. +3
    -19
      cmdline/apt-get.cc
  5. +4
    -0
      cmdline/apt.cc

+ 9
- 0
apt-private/private-main.cc View File

@@ -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


+ 1
- 0
apt-private/private-main.h View File

@@ -6,5 +6,6 @@
class CommandLine;

APT_PUBLIC void CheckSimulateMode(CommandLine &CmdL);
APT_PUBLIC void InitSignals();

#endif

+ 21
- 0
apt-private/private-output.cc View File

@@ -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");


+ 3
- 19
cmdline/apt-get.cc View File

@@ -1664,20 +1664,6 @@ static bool ShowHelp(CommandLine &)
"pages for more information and options.\n"
" This APT has Super Cow Powers.\n");
return true;
}
/*}}}*/
// 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
}
/*}}}*/
int main(int argc,const char *argv[]) /*{{{*/
@@ -1734,14 +1720,12 @@ int main(int argc,const char *argv[]) /*{{{*/
// see if we are in simulate mode
CheckSimulateMode(CmdL);

// Init the signals
InitSignals();

// Setup the output streams
InitOutput();

// Setup the signals
signal(SIGPIPE,SIG_IGN);
signal(SIGWINCH,SigWinch);
SigWinch(0);

// Match the operation
CmdL.DispatchArg(Cmds);



+ 4
- 0
cmdline/apt.cc View File

@@ -96,6 +96,10 @@ int main(int argc, const char *argv[]) /*{{{*/

std::vector<CommandLine::Args> Args = getCommandArgs("apt", CommandLine::GetCommand(Cmds, argc, argv));

// Init the signals
InitSignals();

// Init the output
InitOutput();

// Set up gettext support


Loading…
Cancel
Save