Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Apr 2011 07:34:01 +0000 (UTC)
From:      Edwin Groothuis <edwin@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r220411 - stable/8/usr.sbin/tzsetup
Message-ID:  <201104070734.p377Y1VV032570@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: edwin
Date: Thu Apr  7 07:34:01 2011
New Revision: 220411
URL: http://svn.freebsd.org/changeset/base/220411

Log:
  MFC of r220172
  
  Add a menu entry for UTC in the main menu.
  
  PR:             bin/156019
  Submitted by:   Daniel O'Conner

Modified:
  stable/8/usr.sbin/tzsetup/tzsetup.c
Directory Properties:
  stable/8/usr.sbin/tzsetup/   (props changed)

Modified: stable/8/usr.sbin/tzsetup/tzsetup.c
==============================================================================
--- stable/8/usr.sbin/tzsetup/tzsetup.c	Thu Apr  7 07:10:42 2011	(r220410)
+++ stable/8/usr.sbin/tzsetup/tzsetup.c	Thu Apr  7 07:34:01 2011	(r220411)
@@ -66,10 +66,13 @@ static int usedialog = 1;
 static char *chrootenv = NULL;
 
 static void	usage(void);
+static int	confirm_zone(const char *filename);
 static int	continent_country_menu(dialogMenuItem *);
+static int	install_zoneinfo_file(const char *zoneinfo_file);
 static int	set_zone_multi(dialogMenuItem *);
 static int	set_zone_whole_country(dialogMenuItem *);
 static int	set_zone_menu(dialogMenuItem *);
+static int	set_zone_utc(void);
 
 struct continent {
 	dialogMenuItem *menu;
@@ -79,7 +82,7 @@ struct continent {
 };
 
 static struct continent	africa, america, antarctica, arctic, asia, atlantic;
-static struct continent	australia, europe, indian, pacific;
+static struct continent	australia, europe, indian, pacific, utc;
 
 static struct continent_names {
 	const char	*name;
@@ -94,7 +97,8 @@ static struct continent_names {
 	{ "Australia",	&australia },
 	{ "Europe",	&europe },
 	{ "Indian",	&indian },
-	{ "Pacific",	&pacific }
+	{ "Pacific",	&pacific },
+	{ "UTC", 	&utc }
 };
 
 static struct continent_items {
@@ -110,7 +114,8 @@ static struct continent_items {
 	{ "7",	"Australia" },
 	{ "8",	"Europe" },
 	{ "9",	"Indian Ocean" },
-	{ "0",	"Pacific Ocean" }
+	{ "0",	"Pacific Ocean" },
+	{ "a",	"UTC" }
 };
 
 #define	NCONTINENTS	\
@@ -128,6 +133,9 @@ continent_country_menu(dialogMenuItem *c
 	int		menulen;
 	int		rv;
 
+	if (strcmp(continent->title, "UTC") == 0)
+	        return set_zone_utc();	
+
 	/* Short cut -- if there's only one country, don't post a menu. */
 	if (contp->nitems == 1)
 		return (contp->menu[0].fire(&contp->menu[0]));
@@ -502,6 +510,15 @@ set_zone_menu(dialogMenuItem *dmi)
 	return (DITEM_LEAVE_MENU);
 }
 
+int
+set_zone_utc(void)
+{
+	if (!confirm_zone(NULL))
+		return (DITEM_FAILURE | DITEM_RECREATE);
+		
+	return (install_zoneinfo_file(NULL));
+}
+
 static int
 install_zoneinfo_file(const char *zoneinfo_file)
 {
@@ -526,7 +543,8 @@ install_zoneinfo_file(const char *zonein
 	else
 		snprintf(prompt, sizeof(prompt),
 		    "Creating symbolic link %s to %s",
-		    path_localtime, zoneinfo_file);
+		    path_localtime,
+		    zoneinfo_file == NULL ? "(UTC)" : zoneinfo_file);
 	if (usedialog)
 		dialog_notify(prompt);
 	else
@@ -534,6 +552,22 @@ install_zoneinfo_file(const char *zonein
 #endif
 
 	if (reallydoit) {
+		if (zoneinfo_file == NULL) {
+			if (unlink(path_localtime) < 0 && errno != ENOENT) {
+				snprintf(title, sizeof(title), "Error");
+				snprintf(prompt, sizeof(prompt),
+				     "Could not delete %s: %s", path_localtime,
+				     strerror(errno));
+				if (usedialog)
+					dialog_mesgbox(title, prompt, 8, 72);
+				else
+					fprintf(stderr, "%s\n", prompt);
+
+				return (DITEM_FAILURE | DITEM_RECREATE);
+			}
+			return (DITEM_LEAVE_MENU);
+		}
+		
 		if (copymode) {
 			fd1 = open(zoneinfo_file, O_RDONLY, 0);
 			if (fd1 < 0) {
@@ -656,7 +690,7 @@ confirm_zone(const char *filename)
 	struct tm	*tm;
 	int		rv;
 	
-	setenv("TZ", filename, 1);
+	setenv("TZ", filename == NULL ? "" : filename, 1);
 	tzset();
 	tm = localtime(&t);
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104070734.p377Y1VV032570>