Don't include version.h.
[platform/upstream/coreutils.git] / src / printenv.c
1 /* printenv -- print all or part of environment
2    Copyright (C) 89, 90, 91, 92, 93, 94, 1995 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2, or (at your option)
7    any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
17
18 /* Usage: printenv [variable...]
19
20    If no arguments are given, print the entire environment.
21    If one or more variable names are given, print the value of
22    each one that is set, and nothing for ones that are not set.
23
24    Exit status:
25    0 if all variables specified were found
26    1 if not
27
28    David MacKenzie and Richard Mlynarik */
29
30 #include <config.h>
31 #include <stdio.h>
32 #include <sys/types.h>
33 #include <getopt.h>
34
35 #include "system.h"
36 #include "error.h"
37
38 /* The name this program was run with. */
39 char *program_name;
40
41 /* If nonzero, display usage information and exit.  */
42 static int show_help;
43
44 /* If nonzero, print the version on standard output and exit.  */
45 static int show_version;
46
47 static struct option const long_options[] =
48 {
49   {"help", no_argument, &show_help, 1},
50   {"version", no_argument, &show_version, 1},
51   {0, 0, 0, 0}
52 };
53
54 extern char **environ;
55
56 static void
57 usage (int status)
58 {
59   if (status != 0)
60     fprintf (stderr, _("Try `%s --help' for more information.\n"),
61              program_name);
62   else
63     {
64       printf (_("Usage: %s [OPTION]... [VARIABLE]...\n"), program_name);
65       printf (_("\
66 If no environment VARIABLE specified, print them all.\n\
67 \n\
68   --help      display this help and exit\n\
69   --version   output version information and exit\n"));
70     }
71   exit (status);
72 }
73
74 void
75 main (int argc, char **argv)
76 {
77   char **env;
78   char *ep, *ap;
79   int i;
80   int matches = 0;
81   int c;
82   int exit_status;
83
84   program_name = argv[0];
85   setlocale (LC_ALL, "");
86   bindtextdomain (PACKAGE, LOCALEDIR);
87   textdomain (PACKAGE);
88
89   while ((c = getopt_long (argc, argv, "", long_options, (int *) 0)) != EOF)
90     {
91       switch (c)
92         {
93         case 0:
94           break;
95
96         default:
97           usage (1);
98         }
99     }
100
101   if (show_version)
102     {
103       printf ("printenv - %s\n", PACKAGE_VERSION);
104       exit (0);
105     }
106
107   if (show_help)
108     usage (0);
109
110   if (optind == argc)
111     {
112       for (env = environ; *env != NULL; ++env)
113         puts (*env);
114       exit_status = 0;
115     }
116   else
117     {
118       for (i = optind; i < argc; ++i)
119         {
120           for (env = environ; *env; ++env)
121             {
122               ep = *env;
123               ap = argv[i];
124               while (*ep != '\0' && *ap != '\0' && *ep++ == *ap++)
125                 {
126                   if (*ep == '=' && *ap == '\0')
127                     {
128                       puts (ep + 1);
129                       ++matches;
130                       break;
131                     }
132                 }
133             }
134         }
135       exit_status = (matches != argc - optind);
136     }
137
138   if (ferror (stdout) || fclose (stdout) == EOF)
139     error (2, errno, _("standard output"));
140
141   exit (exit_status);
142 }