From 4915a1e29ce96a46f0569501f6c8ea6e2e0be9f4 Mon Sep 17 00:00:00 2001 From: jkim Date: Tue, 3 Jun 2008 22:34:52 +0000 Subject: [PATCH] - Replace rcsid with __FBSDID. - Remove paths.h and embed it in the source. - Remove stale alpha support. - Clean up compiler warnings and fix style(9) bugs. --- usr.sbin/tzsetup/paths.h | 5 - usr.sbin/tzsetup/tzsetup.c | 497 +++++++++++++++++++------------------ 2 files changed, 261 insertions(+), 241 deletions(-) delete mode 100644 usr.sbin/tzsetup/paths.h diff --git a/usr.sbin/tzsetup/paths.h b/usr.sbin/tzsetup/paths.h deleted file mode 100644 index 4754e9ad9e9..00000000000 --- a/usr.sbin/tzsetup/paths.h +++ /dev/null @@ -1,5 +0,0 @@ -#define _PATH_ZONETAB "/usr/share/zoneinfo/zone.tab" -#define _PATH_ISO3166 "/usr/share/misc/iso3166" -#define _PATH_ZONEINFO "/usr/share/zoneinfo" -#define _PATH_LOCALTIME "/etc/localtime" -#define _PATH_WALL_CMOS_CLOCK "/etc/wall_cmos_clock" diff --git a/usr.sbin/tzsetup/tzsetup.c b/usr.sbin/tzsetup/tzsetup.c index 6a74c133136..c02bac119e5 100644 --- a/usr.sbin/tzsetup/tzsetup.c +++ b/usr.sbin/tzsetup/tzsetup.c @@ -12,7 +12,7 @@ * no representations about the suitability of this software for any * purpose. It is provided "as is" without express or implied * warranty. - * + * * THIS SOFTWARE IS PROVIDED BY M.I.T. ``AS IS''. M.I.T. DISCLAIMS * ALL EXPRESS OR IMPLIED WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF @@ -32,12 +32,9 @@ * files provided in newer tzdata releases. */ -#ifndef lint -static const char rcsid[] = - "$FreeBSD$"; -#endif /* not lint */ +#include +__FBSDID("$FreeBSD$"); -#include #include #include #include @@ -51,109 +48,125 @@ static const char rcsid[] = #include #include -#include "paths.h" +#define _PATH_ZONETAB "/usr/share/zoneinfo/zone.tab" +#define _PATH_ISO3166 "/usr/share/misc/iso3166" +#define _PATH_ZONEINFO "/usr/share/zoneinfo" +#define _PATH_LOCALTIME "/etc/localtime" +#define _PATH_WALL_CMOS_CLOCK "/etc/wall_cmos_clock" static int reallydoit = 1; -static int continent_country_menu(dialogMenuItem *); -static int set_zone_multi(dialogMenuItem *); -static int set_zone_whole_country(dialogMenuItem *); -static int set_zone_menu(dialogMenuItem *); +static void usage(void); +static int continent_country_menu(dialogMenuItem *); +static int set_zone_multi(dialogMenuItem *); +static int set_zone_whole_country(dialogMenuItem *); +static int set_zone_menu(dialogMenuItem *); struct continent { dialogMenuItem *menu; - int nitems; - int ch; - int sc; + int nitems; + int ch; + int sc; }; -static struct continent africa, america, antarctica, arctic, asia, atlantic; -static struct continent australia, europe, indian, pacific; +static struct continent africa, america, antarctica, arctic, asia, atlantic; +static struct continent australia, europe, indian, pacific; static struct continent_names { - char *name; + const char *name; struct continent *continent; } continent_names[] = { - { "Africa", &africa }, { "America", &america }, - { "Antarctica", &antarctica }, { "Arctic", &arctic }, - { "Asia", &asia }, - { "Atlantic", &atlantic }, { "Australia", &australia }, - { "Europe", &europe }, { "Indian", &indian }, { "Pacific", &pacific } + { "Africa", &africa }, + { "America", &america }, + { "Antarctica", &antarctica }, + { "Arctic", &arctic }, + { "Asia", &asia }, + { "Atlantic", &atlantic }, + { "Australia", &australia }, + { "Europe", &europe }, + { "Indian", &indian }, + { "Pacific", &pacific } }; -static dialogMenuItem continents[] = { - { "1", "Africa", 0, continent_country_menu, 0, &africa }, - { "2", "America -- North and South", 0, continent_country_menu, 0, - &america }, - { "3", "Antarctica", 0, continent_country_menu, 0, &antarctica }, - { "4", "Arctic Ocean", 0, continent_country_menu, 0, &arctic }, - { "5", "Asia", 0, continent_country_menu, 0, &asia }, - { "6", "Atlantic Ocean", 0, continent_country_menu, 0, &atlantic }, - { "7", "Australia", 0, continent_country_menu, 0, &australia }, - { "8", "Europe", 0, continent_country_menu, 0, &europe }, - { "9", "Indian Ocean", 0, continent_country_menu, 0, &indian }, - { "0", "Pacific Ocean", 0, continent_country_menu, 0, &pacific } +static struct continent_items { + char prompt[2]; + char title[30]; +} continent_items[] = { + { "1", "Africa" }, + { "2", "America -- North and South" }, + { "3", "Antarctica" }, + { "4", "Arctic Ocean" }, + { "5", "Asia" }, + { "6", "Atlantic Ocean" }, + { "7", "Australia" }, + { "8", "Europe" }, + { "9", "Indian Ocean" }, + { "0", "Pacific Ocean" } }; -#define NCONTINENTS (int)((sizeof continents)/(sizeof continents[0])) -#define OCEANP(x) ((x) == 3 || (x) == 5 || (x) == 8 || (x) == 9) + +#define NCONTINENTS \ + (int)((sizeof(continent_items)) / (sizeof(continent_items[0]))) +static dialogMenuItem continents[NCONTINENTS]; + +#define OCEANP(x) ((x) == 3 || (x) == 5 || (x) == 8 || (x) == 9) static int continent_country_menu(dialogMenuItem *continent) { - int rv; + char title[64], prompt[64]; struct continent *contp = continent->data; - char title[256]; - int isocean = OCEANP(continent - continents); - int menulen; + int isocean = OCEANP(continent - continents); + int menulen; + int rv; /* 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])); /* It's amazing how much good grammar really matters... */ - if (!isocean) - snprintf(title, sizeof title, "Countries in %s", - continent->title); - else - snprintf(title, sizeof title, "Islands and groups in the %s", - continent->title); + if (!isocean) { + snprintf(title, sizeof(title), "Countries in %s", + continent->title); + snprintf(prompt, sizeof(prompt), "Select a country or region"); + } else { + snprintf(title, sizeof(title), "Islands and groups in the %s", + continent->title); + snprintf(prompt, sizeof(prompt), "Select an island or group"); + } menulen = contp->nitems < 16 ? contp->nitems : 16; - rv = dialog_menu(title, (isocean ? "Select an island or group" - : "Select a country or region"), -1, -1, menulen, - -contp->nitems, contp->menu, 0, &contp->ch, - &contp->sc); + rv = dialog_menu(title, prompt, -1, -1, menulen, -contp->nitems, + contp->menu, 0, &contp->ch, &contp->sc); if (rv == 0) - return DITEM_LEAVE_MENU; - return DITEM_RECREATE; + return (DITEM_LEAVE_MENU); + return (DITEM_RECREATE); } static struct continent * find_continent(const char *name) { - int i; + int i; - for (i = 0; i < NCONTINENTS; i++) { + for (i = 0; i < NCONTINENTS; i++) if (strcmp(name, continent_names[i].name) == 0) - return continent_names[i].continent; - } - return 0; + return (continent_names[i].continent); + return (0); } struct country { - char *name; - char *tlc; - int nzones; - char *filename; /* use iff nzones < 0 */ - struct continent *continent; /* use iff nzones < 0 */ - TAILQ_HEAD(, zone) zones; /* use iff nzones > 0 */ - dialogMenuItem *submenu; /* use iff nzones > 0 */ + char *name; + char *tlc; + int nzones; + char *filename; /* use iff nzones < 0 */ + struct continent *continent; /* use iff nzones < 0 */ + TAILQ_HEAD(, zone) zones; /* use iff nzones > 0 */ + dialogMenuItem *submenu; /* use iff nzones > 0 */ }; struct zone { TAILQ_ENTRY(zone) link; - char *descr; - char *filename; + char *descr; + char *filename; struct continent *continent; }; @@ -162,9 +175,10 @@ struct zone { * of the two-letter variety, so we just size this array to suit. * Beats worrying about dynamic allocation. */ -#define NCOUNTRIES (26*26) +#define NCOUNTRIES (26 * 26) static struct country countries[NCOUNTRIES]; -#define CODE2INT(s) ((s[0] - 'A') * 26 + (s[1] - 'A')) + +#define CODE2INT(s) ((s[0] - 'A') * 26 + (s[1] - 'A')) /* * Read the ISO 3166 country code database in _PATH_ISO3166 @@ -173,11 +187,11 @@ static struct country countries[NCOUNTRIES]; static void read_iso3166_table(void) { - FILE *fp; - char *s, *t, *name; - size_t len; - int lineno; - struct country *cp; + FILE *fp; + struct country *cp; + size_t len; + char *s, *t, *name; + int lineno; fp = fopen(_PATH_ISO3166, "r"); if (!fp) @@ -198,13 +212,13 @@ read_iso3166_table(void) errx(1, _PATH_ISO3166 ":%d: invalid format", lineno); if (t[0] < 'A' || t[0] > 'Z' || t[1] < 'A' || t[1] > 'Z') errx(1, _PATH_ISO3166 ":%d: invalid code `%s'", - lineno, t); + lineno, t); /* Now skip past the three-letter and numeric codes. */ - name = strsep(&s, "\t"); /* 3-let */ + name = strsep(&s, "\t"); /* 3-let */ if (name == 0 || strlen(name) != 3) errx(1, _PATH_ISO3166 ":%d: invalid format", lineno); - name = strsep(&s, "\t"); /* numeric */ + name = strsep(&s, "\t"); /* numeric */ if (name == 0 || strlen(name) != 3) errx(1, _PATH_ISO3166 ":%d: invalid format", lineno); @@ -212,9 +226,9 @@ read_iso3166_table(void) cp = &countries[CODE2INT(t)]; if (cp->name) - errx(1, _PATH_ISO3166 - ":%d: country code `%s' multiply defined: %s", - lineno, t, cp->name); + errx(1, _PATH_ISO3166 + ":%d: country code `%s' multiply defined: %s", + lineno, t, cp->name); cp->name = strdup(name); if (cp->name == NULL) errx(1, "malloc failed"); @@ -228,28 +242,28 @@ read_iso3166_table(void) static void add_zone_to_country(int lineno, const char *tlc, const char *descr, - const char *file, struct continent *cont) + const char *file, struct continent *cont) { - struct zone *zp; - struct country *cp; + struct zone *zp; + struct country *cp; if (tlc[0] < 'A' || tlc[0] > 'Z' || tlc[1] < 'A' || tlc[1] > 'Z') errx(1, _PATH_ZONETAB ":%d: country code `%s' invalid", - lineno, tlc); + lineno, tlc); cp = &countries[CODE2INT(tlc)]; if (cp->name == 0) errx(1, _PATH_ZONETAB ":%d: country code `%s' unknown", - lineno, tlc); + lineno, tlc); if (descr) { if (cp->nzones < 0) - errx(1, _PATH_ZONETAB - ":%d: conflicting zone definition", lineno); + errx(1, _PATH_ZONETAB + ":%d: conflicting zone definition", lineno); - zp = malloc(sizeof *zp); + zp = malloc(sizeof(*zp)); if (zp == 0) - errx(1, "malloc(%lu)", (unsigned long)sizeof *zp); + errx(1, "malloc(%zu)", sizeof(*zp)); if (cp->nzones == 0) TAILQ_INIT(&cp->zones); @@ -265,11 +279,11 @@ add_zone_to_country(int lineno, const char *tlc, const char *descr, cp->nzones++; } else { if (cp->nzones > 0) - errx(1, _PATH_ZONETAB - ":%d: zone must have description", lineno); + errx(1, _PATH_ZONETAB + ":%d: zone must have description", lineno); if (cp->nzones < 0) errx(1, _PATH_ZONETAB - ":%d: zone multiply defined", lineno); + ":%d: zone multiply defined", lineno); cp->nzones = -1; cp->filename = strdup(file); if (cp->filename == NULL) @@ -289,13 +303,13 @@ compare_countries(const void *xa, const void *xb) const struct country *a = xa, *b = xb; if (a->name == 0 && b->name == 0) - return 0; + return (0); if (a->name == 0 && b->name != 0) - return 1; + return (1); if (b->name == 0) - return -1; + return (-1); - return strcmp(a->name, b->name); + return (strcmp(a->name, b->name)); } /* @@ -305,19 +319,19 @@ compare_countries(const void *xa, const void *xb) static void sort_countries(void) { - qsort(countries, NCOUNTRIES, sizeof countries[0], compare_countries); + + qsort(countries, NCOUNTRIES, sizeof(countries[0]), compare_countries); } static void read_zones(void) { - FILE *fp; - char *line; - size_t len; - int lineno; - char *tlc, *coord, *file, *descr, *p; - char contbuf[16]; + char contbuf[16]; + FILE *fp; struct continent *cont; + size_t len; + char *line, *tlc, *coord, *file, *descr, *p; + int lineno; fp = fopen(_PATH_ZONETAB, "r"); if (!fp) @@ -335,21 +349,21 @@ read_zones(void) tlc = strsep(&line, "\t"); if (strlen(tlc) != 2) errx(1, _PATH_ZONETAB ":%d: invalid country code `%s'", - lineno, tlc); + lineno, tlc); coord = strsep(&line, "\t"); file = strsep(&line, "\t"); p = strchr(file, '/'); if (p == 0) errx(1, _PATH_ZONETAB ":%d: invalid zone name `%s'", - lineno, file); + lineno, file); contbuf[0] = '\0'; strncat(contbuf, file, p - file); cont = find_continent(contbuf); if (!cont) errx(1, _PATH_ZONETAB ":%d: invalid region `%s'", - lineno, contbuf); + lineno, contbuf); - descr = (line && *line) ? line : 0; + descr = (line != NULL && *line != '\0') ? line : NULL; add_zone_to_country(lineno, tlc, descr, file, cont); } @@ -359,11 +373,11 @@ read_zones(void) static void make_menus(void) { - struct country *cp; - struct zone *zp, *zp2; + struct country *cp; + struct zone *zp, *zp2; struct continent *cont; - dialogMenuItem *dmi; - int i; + dialogMenuItem *dmi; + int i; /* * First, count up all the countries in each continent/ocean. @@ -380,8 +394,8 @@ make_menus(void) TAILQ_FOREACH(zp, &cp->zones, link) { cont = zp->continent; for (zp2 = TAILQ_FIRST(&cp->zones); - zp2->continent != cont; - zp2 = TAILQ_NEXT(zp2, link)) + zp2->continent != cont; + zp2 = TAILQ_NEXT(zp2, link)) ; if (zp2 == zp) zp->continent->nitems++; @@ -390,17 +404,22 @@ make_menus(void) } /* - * Now allocate memory for the country menus. We set - * nitems back to zero so that we can use it for counting - * again when we actually build the menus. + * Now allocate memory for the country menus and initialize + * continent menus. We set nitems back to zero so that we can + * use it for counting again when we actually build the menus. */ + memset(continents, 0, sizeof(continents)); for (i = 0; i < NCONTINENTS; i++) { continent_names[i].continent->menu = - malloc(sizeof(dialogMenuItem) * - continent_names[i].continent->nitems); + malloc(sizeof(dialogMenuItem) * + continent_names[i].continent->nitems); if (continent_names[i].continent->menu == 0) errx(1, "malloc for continent menu"); continent_names[i].continent->nitems = 0; + continents[i].prompt = continent_items[i].prompt; + continents[i].title = continent_items[i].title; + continents[i].fire = continent_country_menu; + continents[i].data = continent_names[i].continent; } /* @@ -413,25 +432,23 @@ make_menus(void) continue; if (cp->nzones < 0) { dmi = &cp->continent->menu[cp->continent->nitems]; - memset(dmi, 0, sizeof *dmi); - asprintf(&dmi->prompt, "%d", - ++cp->continent->nitems); + memset(dmi, 0, sizeof(*dmi)); + asprintf(&dmi->prompt, "%d", ++cp->continent->nitems); dmi->title = cp->name; dmi->checked = 0; dmi->fire = set_zone_whole_country; dmi->selected = 0; dmi->data = cp; } else { - cp->submenu = malloc(cp->nzones * sizeof *dmi); + cp->submenu = malloc(cp->nzones * sizeof(*dmi)); if (cp->submenu == 0) errx(1, "malloc for submenu"); cp->nzones = 0; TAILQ_FOREACH(zp, &cp->zones, link) { cont = zp->continent; dmi = &cp->submenu[cp->nzones]; - memset(dmi, 0, sizeof *dmi); - asprintf(&dmi->prompt, "%d", - ++cp->nzones); + memset(dmi, 0, sizeof(*dmi)); + asprintf(&dmi->prompt, "%d", ++cp->nzones); dmi->title = zp->descr; dmi->checked = 0; dmi->fire = set_zone_multi; @@ -439,14 +456,14 @@ make_menus(void) dmi->data = zp; for (zp2 = TAILQ_FIRST(&cp->zones); - zp2->continent != cont; - zp2 = TAILQ_NEXT(zp2, link)) + zp2->continent != cont; + zp2 = TAILQ_NEXT(zp2, link)) ; if (zp2 != zp) continue; dmi = &cont->menu[cont->nitems]; - memset(dmi, 0, sizeof *dmi); + memset(dmi, 0, sizeof(*dmi)); asprintf(&dmi->prompt, "%d", ++cont->nitems); dmi->title = cp->name; dmi->checked = 0; @@ -461,192 +478,195 @@ make_menus(void) static int set_zone_menu(dialogMenuItem *dmi) { - int rv; - char buf[256]; - struct country *cp = dmi->data; - int menulen; - - snprintf(buf, sizeof buf, "%s Time Zones", cp->name); + char title[64], prompt[64]; + struct country *cp = dmi->data; + int menulen; + int rv; + + snprintf(title, sizeof(title), "%s Time Zones", cp->name); + snprintf(prompt, sizeof(prompt), + "Select a zone which observes the same time as your locality."); menulen = cp->nzones < 16 ? cp->nzones : 16; - rv = dialog_menu(buf, "Select a zone which observes the same time as " - "your locality.", -1, -1, menulen, -cp->nzones, - cp->submenu, 0, 0, 0); + rv = dialog_menu(title, prompt, -1, -1, menulen, -cp->nzones, + cp->submenu, 0, 0, 0); if (rv != 0) - return DITEM_RECREATE; - return DITEM_LEAVE_MENU; + return (DITEM_RECREATE); + return (DITEM_LEAVE_MENU); } static int install_zone_file(const char *filename) { - struct stat sb; - int fd1, fd2; - int copymode; - char *msg; - ssize_t len; - char buf[1024]; - - if (lstat(_PATH_LOCALTIME, &sb) < 0) + char buf[1024]; + char title[64], prompt[64]; + struct stat sb; + ssize_t len; + int fd1, fd2, copymode; + + if (lstat(_PATH_LOCALTIME, &sb) < 0) { /* Nothing there yet... */ copymode = 1; - else if(S_ISLNK(sb.st_mode)) + } else if (S_ISLNK(sb.st_mode)) copymode = 0; else copymode = 1; #ifdef VERBOSE if (copymode) - asprintf(&msg, "Copying %s to " _PATH_LOCALTIME, filename); + snprintf(prompt, sizeof(prompt), + "Copying %s to " _PATH_LOCALTIME, filename); else - asprintf(&msg, "Creating symbolic link " _PATH_LOCALTIME - " to %s", filename); - - dialog_notify(msg); - free(msg); + snprintf(prompt, sizeof(prompt), + "Creating symbolic link " _PATH_LOCALTIME " to %s", + filename); + dialog_notify(prompt); #endif if (reallydoit) { if (copymode) { fd1 = open(filename, O_RDONLY, 0); if (fd1 < 0) { - asprintf(&msg, "Could not open %s: %s", - filename, strerror(errno)); - dialog_mesgbox("Error", msg, 8, 72); - free(msg); - return DITEM_FAILURE | DITEM_RECREATE; + snprintf(title, sizeof(title), "Error"); + snprintf(prompt, sizeof(prompt), + "Could not open %s: %s", filename, + strerror(errno)); + dialog_mesgbox(title, prompt, 8, 72); + return (DITEM_FAILURE | DITEM_RECREATE); } unlink(_PATH_LOCALTIME); - fd2 = open(_PATH_LOCALTIME, - O_CREAT|O_EXCL|O_WRONLY, - S_IRUSR|S_IRGRP|S_IROTH); + fd2 = open(_PATH_LOCALTIME, O_CREAT | O_EXCL | O_WRONLY, + S_IRUSR | S_IRGRP | S_IROTH); if (fd2 < 0) { - asprintf(&msg, "Could not open " - _PATH_LOCALTIME ": %s", - strerror(errno)); - dialog_mesgbox("Error", msg, 8, 72); - free(msg); - return DITEM_FAILURE | DITEM_RECREATE; + snprintf(title, sizeof(title), "Error"); + snprintf(prompt, sizeof(prompt), + "Could not open " _PATH_LOCALTIME ": %s", + strerror(errno)); + dialog_mesgbox(title, prompt, 8, 72); + return (DITEM_FAILURE | DITEM_RECREATE); } - while ((len = read(fd1, buf, sizeof buf)) > 0) + while ((len = read(fd1, buf, sizeof(buf))) > 0) len = write(fd2, buf, len); if (len == -1) { - asprintf(&msg, "Error copying %s to " - _PATH_LOCALTIME ": %s", - filename, strerror(errno)); - dialog_mesgbox("Error", msg, 8, 72); - free(msg); + snprintf(title, sizeof(title), "Error"); + snprintf(prompt, sizeof(prompt), + "Error copying %s to " _PATH_LOCALTIME + ": %s", filename, strerror(errno)); + dialog_mesgbox(title, prompt, 8, 72); /* Better to leave none than a corrupt one. */ unlink(_PATH_LOCALTIME); - return DITEM_FAILURE | DITEM_RECREATE; + return (DITEM_FAILURE | DITEM_RECREATE); } close(fd1); close(fd2); } else { if (access(filename, R_OK) != 0) { - asprintf(&msg, "Cannot access %s: %s", - filename, strerror(errno)); - dialog_mesgbox("Error", msg, 8, 72); - free(msg); - return DITEM_FAILURE | DITEM_RECREATE; + snprintf(title, sizeof(title), "Error"); + snprintf(prompt, sizeof(prompt), + "Cannot access %s: %s", filename, + strerror(errno)); + dialog_mesgbox(title, prompt, 8, 72); + return (DITEM_FAILURE | DITEM_RECREATE); } unlink(_PATH_LOCALTIME); if (symlink(filename, _PATH_LOCALTIME) < 0) { - asprintf(&msg, "Cannot create symbolic link " - _PATH_LOCALTIME " to %s: %s", - filename, strerror(errno)); - dialog_mesgbox("Error", msg, 8, 72); - free(msg); - return DITEM_FAILURE | DITEM_RECREATE; + snprintf(title, sizeof(title), "Error"); + snprintf(prompt, sizeof(prompt), + "Cannot create symbolic link " + _PATH_LOCALTIME " to %s: %s", filename, + strerror(errno)); + dialog_mesgbox(title, prompt, 8, 72); + return (DITEM_FAILURE | DITEM_RECREATE); } } } #ifdef VERBOSE + snprintf(title, sizeof(title), "Done"); if (copymode) - asprintf(&msg, "Copied timezone file from %s to " - _PATH_LOCALTIME, filename); + snprintf(prompt, sizeof(prompt), + "Copied timezone file from %s to " _PATH_LOCALTIME, + filename); else - asprintf(&msg, "Created symbolic link from " _PATH_LOCALTIME - " to %s", filename); - - dialog_mesgbox("Done", msg, 8, 72); - free(msg); + snprintf(prompt, sizeof(prompt), "Created symbolic link from " + _PATH_LOCALTIME " to %s", filename); + dialog_mesgbox(title, prompt, 8, 72); #endif - return DITEM_LEAVE_MENU; + return (DITEM_LEAVE_MENU); } static int confirm_zone(const char *filename) { - char *msg; - struct tm *tm; - time_t t = time(0); - int rv; + char title[64], prompt[64]; + time_t t = time(0); + struct tm *tm; + int rv; setenv("TZ", filename, 1); tzset(); tm = localtime(&t); - asprintf(&msg, "Does the abbreviation `%s' look reasonable?", - tm->tm_zone); - rv = !dialog_yesno("Confirmation", msg, 5, 72); - free(msg); - return rv; + snprintf(title, sizeof(title), "Confirmation"); + snprintf(prompt, sizeof(prompt), + "Does the abbreviation `%s' look reasonable?", tm->tm_zone); + rv = !dialog_yesno(title, prompt, 5, 72); + return (rv); } static int set_zone_multi(dialogMenuItem *dmi) { - char *fn; - struct zone *zp = dmi->data; - int rv; + struct zone *zp = dmi->data; + char *fn; + int rv; if (!confirm_zone(zp->filename)) - return DITEM_FAILURE | DITEM_RECREATE; + return (DITEM_FAILURE | DITEM_RECREATE); asprintf(&fn, "%s/%s", _PATH_ZONEINFO, zp->filename); rv = install_zone_file(fn); free(fn); - return rv; + return (rv); } static int set_zone_whole_country(dialogMenuItem *dmi) { - char *fn; - struct country *cp = dmi->data; - int rv; + struct country *cp = dmi->data; + char *fn; + int rv; if (!confirm_zone(cp->filename)) - return DITEM_FAILURE | DITEM_RECREATE; + return (DITEM_FAILURE | DITEM_RECREATE); asprintf(&fn, "%s/%s", _PATH_ZONEINFO, cp->filename); rv = install_zone_file(fn); free(fn); - return rv; + return (rv); } static void -usage() +usage(void) { + fprintf(stderr, "usage: tzsetup [-n]\n"); exit(1); } +#if defined(__sparc64__) +#define DIALOG_UTC dialog_yesno +#else +#define DIALOG_UTC dialog_noyes +#endif + int main(int argc, char **argv) { - int c, fd; - int (*dialog_utc)(unsigned char *, unsigned char *, int, int); - -#if defined(__alpha__) || defined(__sparc64__) - dialog_utc = dialog_yesno; -#else - dialog_utc = dialog_noyes; -#endif + char title[64], prompt[128]; + int c, fd; while ((c = getopt(argc, argv, "n")) != -1) { switch(c) { @@ -663,24 +683,28 @@ main(int argc, char **argv) usage(); /* Override the user-supplied umask. */ - (void)umask(S_IWGRP|S_IWOTH); + (void)umask(S_IWGRP | S_IWOTH); read_iso3166_table(); read_zones(); sort_countries(); make_menus(); + snprintf(title, sizeof(title), + "Select local or UTC (Greenwich Mean Time) clock"); + snprintf(prompt, sizeof(prompt), + "Is this machine's CMOS clock set to UTC? " + "If it is set to local time,\n" + "or you don't know, please choose NO here!"); init_dialog(); - if (!dialog_utc("Select local or UTC (Greenwich Mean Time) clock", - "Is this machine's CMOS clock set to UTC? If it is set to local time,\n" - "or you don't know, please choose NO here!", 7, 72)) { + if (!DIALOG_UTC(title, prompt, 7, 72)) { if (reallydoit) unlink(_PATH_WALL_CMOS_CLOCK); } else { if (reallydoit) { fd = open(_PATH_WALL_CMOS_CLOCK, - O_WRONLY|O_CREAT|O_TRUNC, - S_IRUSR|S_IRGRP|S_IROTH); + O_WRONLY | O_CREAT | O_TRUNC, + S_IRUSR | S_IRGRP | S_IROTH); if (fd < 0) err(1, "create %s", _PATH_WALL_CMOS_CLOCK); close(fd); @@ -688,22 +712,23 @@ main(int argc, char **argv) } dialog_clear_norefresh(); if (optind == argc - 1) { - char *msg; - asprintf(&msg, "\nUse the default `%s' zone?", argv[optind]); - if (!dialog_yesno("Default timezone provided", msg, 7, 72)) { + snprintf(title, sizeof(title), "Default timezone provided"); + snprintf(prompt, sizeof(prompt), + "\nUse the default `%s' zone?", argv[optind]); + if (!dialog_yesno(title, prompt, 7, 72)) { install_zone_file(argv[optind]); dialog_clear(); end_dialog(); - return 0; + return (0); } - free(msg); dialog_clear_norefresh(); } - dialog_menu("Time Zone Selector", "Select a region", -1, -1, - NCONTINENTS, -NCONTINENTS, continents, 0, NULL, NULL); + snprintf(title, sizeof(title), "Time Zone Selector"); + snprintf(prompt, sizeof(prompt), "Select a region"); + dialog_menu(title, prompt, -1, -1, NCONTINENTS, -NCONTINENTS, + continents, 0, NULL, NULL); dialog_clear(); end_dialog(); - return 0; + return (0); } - -- 2.45.0