>From 50aefa315b50b151a2192168fa46e9a311c06147 Mon Sep 17 00:00:00 2001
From: Van de Bugger <van.de.bug...@gmail.com>
Date: Fri, 23 Nov 2012 02:38:48 +0400
Subject: [PATCH] printenv: -n option added -- show names of variables.

* src/printenv.c: -n option added -- show names of variables.
---
 src/printenv.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/printenv.c b/src/printenv.c
index 5c01f8d..b4583bd 100644
--- a/src/printenv.c
+++ b/src/printenv.c
@@ -49,6 +49,7 @@ static struct option const longopts[] =
   {"null", no_argument, NULL, '0'},
   {GETOPT_HELP_OPTION_DECL},
   {GETOPT_VERSION_OPTION_DECL},
+  {"names", no_argument, NULL, 'n'},
   {NULL, 0, NULL, 0}
 };
 
@@ -69,6 +70,9 @@ If no VARIABLE is specified, print name and value
pairs for them all.\n\
       fputs (_("\
   -0, --null     end each output line with 0 byte rather than newline\n
\
 "), stdout);
+      fputs (_("\
+  -n, --names    print also names of the specified environment
VARIABLE(s)\n\
+"), stdout);
       fputs (HELP_OPTION_DESCRIPTION, stdout);
       fputs (VERSION_OPTION_DESCRIPTION, stdout);
       printf (USAGE_BUILTIN_WARNING, PROGRAM_NAME);
@@ -81,11 +85,12 @@ int
 main (int argc, char **argv)
 {
   char **env;
-  char *ep, *ap;
+  char *ep, *ap, *bp;
   int i;
   bool ok;
   int optc;
   bool opt_nul_terminate_output = false;
+  bool opt_show_names = false;
 
   initialize_main (&argc, &argv);
   set_program_name (argv[0]);
@@ -96,13 +101,16 @@ main (int argc, char **argv)
   initialize_exit_failure (PRINTENV_FAILURE);
   atexit (close_stdout);
 
-  while ((optc = getopt_long (argc, argv, "+iu:0", longopts, NULL)) !=
-1)
+  while ((optc = getopt_long (argc, argv, "+iu:0n", longopts, NULL)) !=
-1)
     {
       switch (optc)
         {
         case '0':
           opt_nul_terminate_output = true;
           break;
+        case 'n':
+          opt_show_names = true;
+          break;
         case_GETOPT_HELP_CHAR;
         case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
         default:
@@ -130,13 +138,14 @@ main (int argc, char **argv)
 
           for (env = environ; *env; ++env)
             {
-              ep = *env;
+              bp = ep = *env;
               ap = argv[i];
               while (*ep != '\0' && *ap != '\0' && *ep++ == *ap++)
                 {
                   if (*ep == '=' && *ap == '\0')
                     {
-                      printf ("%s%c", ep + 1,
+                      printf ("%s%c",
+                              opt_show_names ? bp : ep + 1,
                               opt_nul_terminate_output ? '\0' : '\n');
                       matched = true;
                       break;
-- 
1.7.11.7






Reply via email to