[systemd-devel] [PATCH] journalctl: barrow logic from pager.c so that journalctl man page stays correct
Zbigniew Jędrzejewski-Szmek
zbyszek at in.waw.pl
Mon Jul 23 09:27:17 PDT 2012
On 07/20/2012 09:06 AM, Zbigniew Jedrzejewski-Szmek wrote:
> On Fri, Jul 20, 2012 at 05:42:44AM +0000, Shawn Landen wrote:
>> particularly: "Pager to use when --no-pager is not given; overrides $PAGER.
>> Setting this to an empty string or the value cat is equivalent to passing --no-pager."
> Hi,
> your description of the problem is valid, but I think that the patch
> could be improved. We don't want to replicate the variable parsing logic
> in two places...
>
> Can you check if the following works for you:
Commited this fix as fafb6ecc.
Zbyszek
> -----8<--------
> diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
> index e9810c9..e633dd3 100644
> --- a/src/journal/journalctl.c
> +++ b/src/journal/journalctl.c
> @@ -398,11 +398,7 @@ int main(int argc, char *argv[]) {
> goto finish;
> }
>
> - have_pager = !arg_no_pager && !arg_follow;
> - if (have_pager) {
> - columns();
> - pager_open();
> - }
> + have_pager = !arg_no_pager && !arg_follow && pager_open();
>
> if (arg_output == OUTPUT_JSON) {
> fputc('[', stdout);
> diff --git a/src/shared/pager.c b/src/shared/pager.c
> index 6a85af3..36b409c 100644
> --- a/src/shared/pager.c
> +++ b/src/shared/pager.c
> @@ -44,20 +44,20 @@ _noreturn_ static void pager_fallback(void) {
> _exit(EXIT_SUCCESS);
> }
>
> -void pager_open(void) {
> +bool pager_open(void) {
> int fd[2];
> const char *pager;
> pid_t parent_pid;
>
> if (pager_pid > 0)
> - return;
> + return false;
>
> if ((pager = getenv("SYSTEMD_PAGER")) || (pager = getenv("PAGER")))
> if (!*pager || streq(pager, "cat"))
> - return;
> + return false;
>
> if (isatty(STDOUT_FILENO) <= 0)
> - return;
> + return false;
>
> /* Determine and cache number of columns before we spawn the
> * pager so that we get the value from the actual tty */
> @@ -65,7 +65,7 @@ void pager_open(void) {
>
> if (pipe(fd) < 0) {
> log_error("Failed to create pager pipe: %m");
> - return;
> + return false;
> }
>
> parent_pid = getpid();
> @@ -74,7 +74,7 @@ void pager_open(void) {
> if (pager_pid < 0) {
> log_error("Failed to fork pager: %m");
> close_pipe(fd);
> - return;
> + return false;
> }
>
> /* In the child start the pager */
> @@ -115,10 +115,13 @@ void pager_open(void) {
> }
>
> /* Return in the parent */
> - if (dup2(fd[1], STDOUT_FILENO) < 0)
> + if (dup2(fd[1], STDOUT_FILENO) < 0) {
> log_error("Failed to duplicate pager pipe: %m");
> + return false;
> + }
>
> close_pipe(fd);
> + return true;
> }
>
> void pager_close(void) {
> diff --git a/src/shared/pager.h b/src/shared/pager.h
> index dcd6195..0b4afc0 100644
> --- a/src/shared/pager.h
> +++ b/src/shared/pager.h
> @@ -21,5 +21,7 @@
> along with systemd; If not, see <http://www.gnu.org/licenses/>.
> ***/
>
> -void pager_open(void);
> +#include <stdbool.h>
> +
> +bool pager_open(void);
> void pager_close(void);
More information about the systemd-devel
mailing list