summaryrefslogtreecommitdiff
path: root/src/uptime.c
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-01-20 10:55:18 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-01-20 10:55:18 +0000
commit70e9163c9c18e995515598085cb824e554eb7ae7 (patch)
treea42dc8b2a6c031354bf31472de888bfc8a060132 /src/uptime.c
parentcbf5993c43f49281173f185863577d86bfac6eae (diff)
downloadcoreutils-tarball-70e9163c9c18e995515598085cb824e554eb7ae7.tar.gz
Diffstat (limited to 'src/uptime.c')
-rw-r--r--src/uptime.c124
1 files changed, 68 insertions, 56 deletions
diff --git a/src/uptime.c b/src/uptime.c
index 6b2a724..74ea87d 100644
--- a/src/uptime.c
+++ b/src/uptime.c
@@ -1,10 +1,10 @@
/* GNU's uptime.
- Copyright (C) 1992-2002, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 1992-2016 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify
+ This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -12,8 +12,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* Created by hacking who.c by Kaveh Ghazi ghazi@caip.rutgers.edu. */
@@ -37,16 +36,15 @@
#include "long-options.h"
#include "quote.h"
#include "readutmp.h"
+#include "fprintftime.h"
-/* The official name of this program (e.g., no `g' prefix). */
+/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "uptime"
-#define AUTHORS "Joseph Arceneaux", "David MacKenzie", "Kaveh Ghazi"
-
-int getloadavg ();
-
-/* The name this program was run with. */
-char *program_name;
+#define AUTHORS \
+ proper_name ("Joseph Arceneaux"), \
+ proper_name ("David MacKenzie"), \
+ proper_name ("Kaveh Ghazi")
static void
print_uptime (size_t n, const STRUCT_UTMP *this)
@@ -70,13 +68,13 @@ print_uptime (size_t n, const STRUCT_UTMP *this)
char buf[BUFSIZ];
char *b = fgets (buf, BUFSIZ, fp);
if (b == buf)
- {
- char *end_ptr;
- double upsecs = c_strtod (buf, &end_ptr);
- if (buf != end_ptr)
- uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
- ? upsecs : -1);
- }
+ {
+ char *end_ptr;
+ double upsecs = c_strtod (buf, &end_ptr);
+ if (buf != end_ptr)
+ uptime = (0 <= upsecs && upsecs < TYPE_MAXIMUM (time_t)
+ ? upsecs : -1);
+ }
fclose (fp);
}
@@ -110,61 +108,63 @@ print_uptime (size_t n, const STRUCT_UTMP *this)
{
entries += IS_USER_PROCESS (this);
if (UT_TYPE_BOOT_TIME (this))
- boot_time = UT_TIME_MEMBER (this);
+ boot_time = UT_TIME_MEMBER (this);
++this;
}
+#else
+ (void) n;
+ (void) this;
#endif
+
time_now = time (NULL);
#if defined HAVE_PROC_UPTIME
if (uptime == 0)
#endif
{
if (boot_time == 0)
- error (EXIT_FAILURE, errno, _("couldn't get boot time"));
+ error (EXIT_FAILURE, errno, _("couldn't get boot time"));
uptime = time_now - boot_time;
}
updays = uptime / 86400;
uphours = (uptime - (updays * 86400)) / 3600;
upmins = (uptime - (updays * 86400) - (uphours * 3600)) / 60;
tmn = localtime (&time_now);
+ /* procps' version of uptime also prints the seconds field, but
+ previous versions of coreutils don't. */
if (tmn)
- printf (_(" %2d:%02d%s up "),
- ((tmn->tm_hour % 12) == 0 ? 12 : tmn->tm_hour % 12),
- /* FIXME: use strftime, not am, pm. Uli reports that
- the german translation is meaningless. */
- tmn->tm_min, (tmn->tm_hour < 12 ? _("am") : _("pm")));
+ /* TRANSLATORS: This prints the current clock time. */
+ fprintftime (stdout, _(" %H:%M%P "), tmn, 0, 0);
else
- printf (_(" ??:???? up "));
+ printf (_(" ??:???? "));
if (uptime == (time_t) -1)
- printf (_("???? days ??:??, "));
+ printf (_("up ???? days ??:??, "));
else
{
if (0 < updays)
- printf (ngettext ("%ld day", "%ld days", select_plural (updays)),
- updays);
- printf (" %2d:%02d, ", uphours, upmins);
+ printf (ngettext ("up %ld day %2d:%02d, ",
+ "up %ld days %2d:%02d, ",
+ select_plural (updays)),
+ updays, uphours, upmins);
+ else
+ printf (_("up %2d:%02d, "), uphours, upmins);
}
- printf (ngettext ("%lu user", "%lu users", entries),
- (unsigned long int) entries);
+ printf (ngettext ("%lu user", "%lu users", select_plural (entries)),
+ (unsigned long int) entries);
-#if defined HAVE_GETLOADAVG || defined C_GETLOADAVG
loads = getloadavg (avg, 3);
-#else
- loads = -1;
-#endif
if (loads == -1)
putchar ('\n');
else
{
if (loads > 0)
- printf (_(", load average: %.2f"), avg[0]);
+ printf (_(", load average: %.2f"), avg[0]);
if (loads > 1)
- printf (", %.2f", avg[1]);
+ printf (", %.2f", avg[1]);
if (loads > 2)
- printf (", %.2f", avg[2]);
+ printf (", %.2f", avg[2]);
if (loads > 0)
- putchar ('\n');
+ putchar ('\n');
}
}
@@ -176,36 +176,48 @@ static void
uptime (const char *filename, int options)
{
size_t n_users;
- STRUCT_UTMP *utmp_buf;
+ STRUCT_UTMP *utmp_buf = NULL;
#if HAVE_UTMPX_H || HAVE_UTMP_H
if (read_utmp (filename, &n_users, &utmp_buf, options) != 0)
- error (EXIT_FAILURE, errno, "%s", filename);
+ error (EXIT_FAILURE, errno, "%s", quotef (filename));
#endif
print_uptime (n_users, utmp_buf);
+
+ IF_LINT (free (utmp_buf));
}
void
usage (int status)
{
if (status != EXIT_SUCCESS)
- fprintf (stderr, _("Try `%s --help' for more information.\n"),
- program_name);
+ emit_try_help ();
else
{
- printf (_("Usage: %s [OPTION]... [ FILE ]\n"), program_name);
+ printf (_("Usage: %s [OPTION]... [FILE]\n"), program_name);
printf (_("\
Print the current time, the length of time the system has been up,\n\
the number of users on the system, and the average number of jobs\n\
-in the run queue over the last 1, 5 and 15 minutes.\n\
+in the run queue over the last 1, 5 and 15 minutes."));
+#ifdef __linux__
+ /* It would be better to introduce a configure test for this,
+ but such a test is hard to write. For the moment then, we
+ have a hack which depends on the preprocessor used at compile
+ time to tell us what the running kernel is. Ugh. */
+ printf (_(" \
+Processes in\n\
+an uninterruptible sleep state also contribute to the load average.\n"));
+#else
+ printf (_("\n"));
+#endif
+ printf (_("\
If FILE is not specified, use %s. %s as FILE is common.\n\
-\n\
-"),
- UTMP_FILE, WTMP_FILE);
+\n"),
+ UTMP_FILE, WTMP_FILE);
fputs (HELP_OPTION_DESCRIPTION, stdout);
fputs (VERSION_OPTION_DESCRIPTION, stdout);
- printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT);
+ emit_ancillary_info (PROGRAM_NAME);
}
exit (status);
}
@@ -214,15 +226,15 @@ int
main (int argc, char **argv)
{
initialize_main (&argc, &argv);
- program_name = argv[0];
+ set_program_name (argv[0]);
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
atexit (close_stdout);
- parse_long_options (argc, argv, PROGRAM_NAME, GNU_PACKAGE, VERSION,
- usage, AUTHORS, (char const *) NULL);
+ parse_long_options (argc, argv, PROGRAM_NAME, PACKAGE_NAME, Version,
+ usage, AUTHORS, (char const *) NULL);
if (getopt_long (argc, argv, "", NULL, NULL) != -1)
usage (EXIT_FAILURE);
@@ -241,5 +253,5 @@ main (int argc, char **argv)
usage (EXIT_FAILURE);
}
- exit (EXIT_SUCCESS);
+ return EXIT_SUCCESS;
}