Print this page
NEX-3510 Want "scripted" mode for svcs(1) (fix trailing tab)
NEX-3510 Want "scripted" mode for svcs(1)
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>

*** 20,29 **** --- 20,30 ---- */ /* * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, Joyent, Inc. All rights reserved. + * Copyright 2015 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2015, 2016 by Delphix. All rights reserved. */ /* * svcs - display attributes of service instances
*** 144,153 **** --- 145,155 ---- /* Options */ static int *opt_columns = NULL; /* Indices into columns to display. */ static int opt_cnum = 0; static int opt_processes = 0; /* Print processes? */ + static int opt_scripted = 0; /* No header, tabs as separators. */ static int *opt_sort = NULL; /* Indices into columns to sort. */ static int opt_snum = 0; static int opt_nstate_shown = 0; /* Will nstate be shown? */ static int opt_verbose = 0; static char *opt_zone; /* zone selected, if any */
*** 999,1019 **** for (i = 0; i < len; ++i) buf[i] = ~buf[i]; } /* CTID */ #define CTID_COLUMN_WIDTH 6 #define CTID_COLUMN_BUFSIZE 20 /* max ctid_t + space + \0 */ static void sprint_ctid(char **buf, scf_walkinfo_t *wip) { int r; uint64_t c; ! size_t newsize = (*buf ? strlen(*buf) : 0) + CTID_COLUMN_BUFSIZE; ! char *newbuf = safe_malloc(newsize); int restarter_spec; /* * Use the restarter specific get pids routine, if available. * Only check for non-legacy services (wip->pg == 0). --- 1001,1048 ---- for (i = 0; i < len; ++i) buf[i] = ~buf[i]; } + static void + sprint_str(char **buf, const char *str, size_t width) + { + char *newbuf; + size_t newsz = (*buf != NULL ? strlen(*buf) : 0) + 2; + + if (opt_scripted) + newsz += strlen(str); + else + newsz += width; + + newbuf = safe_malloc(newsz); + + if (opt_scripted) { + (void) snprintf(newbuf, newsz, "%s%s%s", + *buf != NULL ? *buf : "", + *buf != NULL ? "\t" : "", + str); + } else { + (void) snprintf(newbuf, newsz, "%s%-*s ", + *buf != NULL ? *buf : "", width, str); + } + + free(*buf); + *buf = newbuf; + } + /* CTID */ #define CTID_COLUMN_WIDTH 6 #define CTID_COLUMN_BUFSIZE 20 /* max ctid_t + space + \0 */ static void sprint_ctid(char **buf, scf_walkinfo_t *wip) { int r; uint64_t c; ! char ctid_buf[CTID_COLUMN_BUFSIZE] = { 0 }; ! char *cstr; int restarter_spec; /* * Use the restarter specific get pids routine, if available. * Only check for non-legacy services (wip->pg == 0).
*** 1029,1050 **** r = get_restarter_count_prop(wip->inst, scf_property_contract, &c, EMPTY_OK | MULTI_OK); } } ! if (r == 0) ! (void) snprintf(newbuf, newsize, "%s%*lu ", ! *buf ? *buf : "", CTID_COLUMN_WIDTH, (ctid_t)c); ! else if (r == E2BIG) ! (void) snprintf(newbuf, newsize, "%s%*lu* ", ! *buf ? *buf : "", CTID_COLUMN_WIDTH - 1, (ctid_t)c); ! else ! (void) snprintf(newbuf, newsize, "%s%*s ", ! *buf ? *buf : "", CTID_COLUMN_WIDTH, "-"); ! if (*buf) ! free(*buf); ! *buf = newbuf; } #define CTID_SORTKEY_WIDTH (sizeof (uint64_t)) static void --- 1058,1075 ---- r = get_restarter_count_prop(wip->inst, scf_property_contract, &c, EMPTY_OK | MULTI_OK); } } ! if (r == 0 || r == E2BIG) { ! if (r == E2BIG) ! ctid_buf[CTID_COLUMN_BUFSIZE - 2] = '*'; ! cstr = ulltostr(c, &ctid_buf[CTID_COLUMN_BUFSIZE - 2]); ! sprint_str(buf, cstr, CTID_COLUMN_WIDTH); ! } else { ! sprint_str(buf, "-", CTID_COLUMN_WIDTH); ! } } #define CTID_SORTKEY_WIDTH (sizeof (uint64_t)) static void
*** 1092,1103 **** static void sprint_desc(char **buf, scf_walkinfo_t *wip) { char *x; - size_t newsize; - char *newbuf; if (common_name_buf == NULL) common_name_buf = safe_malloc(max_scf_value_length + 1); bzero(common_name_buf, max_scf_value_length + 1); --- 1117,1126 ----
*** 1118,1138 **** */ for (x = common_name_buf; *x != '\0'; x++) if (*x == '\n') *x = ' '; ! if (strlen(common_name_buf) > DESC_COLUMN_WIDTH) ! newsize = (*buf ? strlen(*buf) : 0) + ! strlen(common_name_buf) + 1; ! else ! newsize = (*buf ? strlen(*buf) : 0) + DESC_COLUMN_WIDTH + 1; ! newbuf = safe_malloc(newsize); ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! DESC_COLUMN_WIDTH, common_name_buf); ! if (*buf) ! free(*buf); ! *buf = newbuf; } /* ARGSUSED */ static void sortkey_desc(char *buf, int reverse, scf_walkinfo_t *wip) --- 1141,1151 ---- */ for (x = common_name_buf; *x != '\0'; x++) if (*x == '\n') *x = ' '; ! sprint_str(buf, common_name_buf, DESC_COLUMN_WIDTH); } /* ARGSUSED */ static void sortkey_desc(char *buf, int reverse, scf_walkinfo_t *wip)
*** 1218,1229 **** static void sprint_state(char **buf, scf_walkinfo_t *wip) { char state_name[MAX_SCF_STATE_STRING_SZ + 1]; - size_t newsize; - char *newbuf; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_state, state_name, sizeof (state_name)); --- 1231,1240 ----
*** 1238,1255 **** (void) strcat(state_name, "*"); } } else (void) strcpy(state_name, SCF_STATE_STRING_LEGACY); ! newsize = (*buf ? strlen(*buf) : 0) + MAX_SCF_STATE_STRING_SZ + 2; ! newbuf = safe_malloc(newsize); ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! MAX_SCF_STATE_STRING_SZ + 1, state_name); ! ! if (*buf) ! free(*buf); ! *buf = newbuf; } static void sortkey_state(char *buf, int reverse, scf_walkinfo_t *wip) { --- 1249,1259 ---- (void) strcat(state_name, "*"); } } else (void) strcpy(state_name, SCF_STATE_STRING_LEGACY); ! sprint_str(buf, state_name, MAX_SCF_STATE_STRING_SZ); } static void sortkey_state(char *buf, int reverse, scf_walkinfo_t *wip) {
*** 1257,1294 **** } static void sprint_nstate(char **buf, scf_walkinfo_t *wip) { ! char next_state_name[MAX_SCF_STATE_STRING_SZ]; boolean_t blank = 0; - size_t newsize; - char *newbuf; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_next_state, next_state_name, sizeof (next_state_name)); /* Don't print blank fields, to ease parsing. */ if (next_state_name[0] == '\0' || strcmp(next_state_name, SCF_STATE_STRING_NONE) == 0) blank = 1; ! } else blank = 1; if (blank) { next_state_name[0] = '-'; next_state_name[1] = '\0'; } ! newsize = (*buf ? strlen(*buf) : 0) + MAX_SCF_STATE_STRING_SZ + 1; ! newbuf = safe_malloc(newsize); ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! MAX_SCF_STATE_STRING_SZ - 1, next_state_name); ! if (*buf) ! free(*buf); ! *buf = newbuf; } static void sortkey_nstate(char *buf, int reverse, scf_walkinfo_t *wip) { --- 1261,1291 ---- } static void sprint_nstate(char **buf, scf_walkinfo_t *wip) { ! char next_state_name[MAX_SCF_STATE_STRING_SZ + 1]; boolean_t blank = 0; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_next_state, next_state_name, sizeof (next_state_name)); /* Don't print blank fields, to ease parsing. */ if (next_state_name[0] == '\0' || strcmp(next_state_name, SCF_STATE_STRING_NONE) == 0) blank = 1; ! } else { blank = 1; + } if (blank) { next_state_name[0] = '-'; next_state_name[1] = '\0'; } ! sprint_str(buf, next_state_name, MAX_SCF_STATE_STRING_SZ); } static void sortkey_nstate(char *buf, int reverse, scf_walkinfo_t *wip) {
*** 1296,1309 **** } static void sprint_s(char **buf, scf_walkinfo_t *wip) { ! char tmp[3]; ! char state_name[MAX_SCF_STATE_STRING_SZ]; ! size_t newsize = (*buf ? strlen(*buf) : 0) + 4; ! char *newbuf = safe_malloc(newsize); if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_state, state_name, sizeof (state_name)); tmp[0] = state_to_char(state_name); --- 1293,1304 ---- } static void sprint_s(char **buf, scf_walkinfo_t *wip) { ! char state_name[MAX_SCF_STATE_STRING_SZ + 1]; ! char tmp[3] = { 0 }; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_state, state_name, sizeof (state_name)); tmp[0] = state_to_char(state_name);
*** 1315,1365 **** } else { tmp[0] = 'L'; tmp[1] = ' '; } tmp[2] = ' '; ! (void) snprintf(newbuf, newsize, "%s%-*s", *buf ? *buf : "", ! 3, tmp); ! if (*buf) ! free(*buf); ! *buf = newbuf; } static void sprint_n(char **buf, scf_walkinfo_t *wip) { ! char tmp[2]; ! size_t newsize = (*buf ? strlen(*buf) : 0) + 3; ! char *newbuf = safe_malloc(newsize); ! char nstate_name[MAX_SCF_STATE_STRING_SZ]; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_next_state, nstate_name, sizeof (nstate_name)); if (strcmp(nstate_name, SCF_STATE_STRING_NONE) == 0) tmp[0] = '-'; else tmp[0] = state_to_char(nstate_name); ! } else tmp[0] = '-'; ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! 2, tmp); ! if (*buf) ! free(*buf); ! *buf = newbuf; } static void sprint_sn(char **buf, scf_walkinfo_t *wip) { ! char tmp[3]; ! size_t newsize = (*buf ? strlen(*buf) : 0) + 4; ! char *newbuf = safe_malloc(newsize); ! char nstate_name[MAX_SCF_STATE_STRING_SZ]; ! char state_name[MAX_SCF_STATE_STRING_SZ]; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_state, state_name, sizeof (state_name)); get_restarter_string_prop(wip->inst, scf_property_next_state, --- 1310,1350 ---- } else { tmp[0] = 'L'; tmp[1] = ' '; } tmp[2] = ' '; ! ! sprint_str(buf, tmp, 2); } static void sprint_n(char **buf, scf_walkinfo_t *wip) { ! char nstate_name[MAX_SCF_STATE_STRING_SZ + 1]; ! char tmp[2] = { 0 }; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_next_state, nstate_name, sizeof (nstate_name)); if (strcmp(nstate_name, SCF_STATE_STRING_NONE) == 0) tmp[0] = '-'; else tmp[0] = state_to_char(nstate_name); ! } else { tmp[0] = '-'; + } ! sprint_str(buf, tmp, 1); } static void sprint_sn(char **buf, scf_walkinfo_t *wip) { ! char state_name[MAX_SCF_STATE_STRING_SZ + 1]; ! char nstate_name[MAX_SCF_STATE_STRING_SZ + 1]; ! char tmp[3] = { 0 }; if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_state, state_name, sizeof (state_name)); get_restarter_string_prop(wip->inst, scf_property_next_state,
*** 1373,1388 **** } else { tmp[0] = 'L'; tmp[1] = '-'; } ! tmp[2] = ' '; ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! 3, tmp); ! if (*buf) ! free(*buf); ! *buf = newbuf; } /* ARGSUSED */ static void sortkey_sn(char *buf, int reverse, scf_walkinfo_t *wip) --- 1358,1368 ---- } else { tmp[0] = 'L'; tmp[1] = '-'; } ! sprint_str(buf, tmp, 2); } /* ARGSUSED */ static void sortkey_sn(char *buf, int reverse, scf_walkinfo_t *wip)
*** 1413,1476 **** } static void sprint_sta(char **buf, scf_walkinfo_t *wip) { ! char state_name[MAX_SCF_STATE_STRING_SZ]; ! char sta[5]; ! size_t newsize = (*buf ? strlen(*buf) : 0) + 6; ! char *newbuf = safe_malloc(newsize); ! if (wip->pg == NULL) get_restarter_string_prop(wip->inst, scf_property_state, state_name, sizeof (state_name)); ! else (void) strcpy(state_name, SCF_STATE_STRING_LEGACY); (void) strcpy(sta, state_abbrev(state_name)); if (wip->pg == NULL && !opt_nstate_shown && transitioning(wip->inst)) (void) strcat(sta, "*"); ! (void) snprintf(newbuf, newsize, "%s%-4s ", *buf ? *buf : "", sta); ! if (*buf) ! free(*buf); ! *buf = newbuf; } static void sprint_nsta(char **buf, scf_walkinfo_t *wip) { ! char state_name[MAX_SCF_STATE_STRING_SZ]; ! size_t newsize = (*buf ? strlen(*buf) : 0) + 6; ! char *newbuf = safe_malloc(newsize); ! if (wip->pg == NULL) get_restarter_string_prop(wip->inst, scf_property_next_state, state_name, sizeof (state_name)); ! else (void) strcpy(state_name, SCF_STATE_STRING_NONE); if (strcmp(state_name, SCF_STATE_STRING_NONE) == 0) ! (void) snprintf(newbuf, newsize, "%s%-4s ", *buf ? *buf : "", ! "-"); else ! (void) snprintf(newbuf, newsize, "%s%-4s ", *buf ? *buf : "", ! state_abbrev(state_name)); ! if (*buf) ! free(*buf); ! *buf = newbuf; } /* FMRI */ #define FMRI_COLUMN_WIDTH 50 static void sprint_fmri(char **buf, scf_walkinfo_t *wip) { char *fmri_buf = safe_malloc(max_scf_fmri_length + 1); - size_t newsize; - char *newbuf; if (wip->pg == NULL) { if (scf_instance_to_fmri(wip->inst, fmri_buf, max_scf_fmri_length + 1) == -1) scfdie(); --- 1393,1444 ---- } static void sprint_sta(char **buf, scf_walkinfo_t *wip) { ! char state_name[MAX_SCF_STATE_STRING_SZ + 1]; ! char sta[5] = { 0 }; ! if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_state, state_name, sizeof (state_name)); ! } else { (void) strcpy(state_name, SCF_STATE_STRING_LEGACY); + } (void) strcpy(sta, state_abbrev(state_name)); if (wip->pg == NULL && !opt_nstate_shown && transitioning(wip->inst)) (void) strcat(sta, "*"); ! sprint_str(buf, sta, 4); } static void sprint_nsta(char **buf, scf_walkinfo_t *wip) { ! char state_name[MAX_SCF_STATE_STRING_SZ + 1]; ! if (wip->pg == NULL) { get_restarter_string_prop(wip->inst, scf_property_next_state, state_name, sizeof (state_name)); ! } else { (void) strcpy(state_name, SCF_STATE_STRING_NONE); + } if (strcmp(state_name, SCF_STATE_STRING_NONE) == 0) ! sprint_str(buf, "-", 4); else ! sprint_str(buf, state_abbrev(state_name), 4); } /* FMRI */ #define FMRI_COLUMN_WIDTH 50 static void sprint_fmri(char **buf, scf_walkinfo_t *wip) { char *fmri_buf = safe_malloc(max_scf_fmri_length + 1); if (wip->pg == NULL) { if (scf_instance_to_fmri(wip->inst, fmri_buf, max_scf_fmri_length + 1) == -1) scfdie();
*** 1482,1502 **** max_scf_fmri_length + 1 - (sizeof (SCF_FMRI_LEGACY_PREFIX) - 1), 0) != 0) (void) strcat(fmri_buf, LEGACY_UNKNOWN); } ! if (strlen(fmri_buf) > FMRI_COLUMN_WIDTH) ! newsize = (*buf ? strlen(*buf) : 0) + strlen(fmri_buf) + 2; ! else ! newsize = (*buf ? strlen(*buf) : 0) + FMRI_COLUMN_WIDTH + 2; ! newbuf = safe_malloc(newsize); ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! FMRI_COLUMN_WIDTH, fmri_buf); free(fmri_buf); - if (*buf) - free(*buf); - *buf = newbuf; } static void sortkey_fmri(char *buf, int reverse, scf_walkinfo_t *wip) { --- 1450,1461 ---- max_scf_fmri_length + 1 - (sizeof (SCF_FMRI_LEGACY_PREFIX) - 1), 0) != 0) (void) strcat(fmri_buf, LEGACY_UNKNOWN); } ! sprint_str(buf, fmri_buf, FMRI_COLUMN_WIDTH); free(fmri_buf); } static void sortkey_fmri(char *buf, int reverse, scf_walkinfo_t *wip) {
*** 1513,1535 **** #define COMPONENT_COLUMN_WIDTH 20 static void sprint_scope(char **buf, scf_walkinfo_t *wip) { char *scope_buf = safe_malloc(max_scf_name_length + 1); - size_t newsize = (*buf ? strlen(*buf) : 0) + COMPONENT_COLUMN_WIDTH + 2; - char *newbuf = safe_malloc(newsize); assert(wip->scope != NULL); if (scf_scope_get_name(wip->scope, scope_buf, max_scf_name_length) < 0) scfdie(); ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! COMPONENT_COLUMN_WIDTH, scope_buf); ! if (*buf) ! free(*buf); ! *buf = newbuf; free(scope_buf); } static void sortkey_scope(char *buf, int reverse, scf_walkinfo_t *wip) --- 1472,1488 ---- #define COMPONENT_COLUMN_WIDTH 20 static void sprint_scope(char **buf, scf_walkinfo_t *wip) { char *scope_buf = safe_malloc(max_scf_name_length + 1); assert(wip->scope != NULL); if (scf_scope_get_name(wip->scope, scope_buf, max_scf_name_length) < 0) scfdie(); ! sprint_str(buf, scope_buf, COMPONENT_COLUMN_WIDTH); free(scope_buf); } static void sortkey_scope(char *buf, int reverse, scf_walkinfo_t *wip)
*** 1545,1556 **** static void sprint_service(char **buf, scf_walkinfo_t *wip) { char *svc_buf = safe_malloc(max_scf_name_length + 1); - char *newbuf; - size_t newsize; if (wip->pg == NULL) { if (scf_service_get_name(wip->svc, svc_buf, max_scf_name_length + 1) < 0) scfdie(); --- 1498,1507 ----
*** 1558,1580 **** if (pg_get_single_val(wip->pg, "name", SCF_TYPE_ASTRING, svc_buf, max_scf_name_length + 1, EMPTY_OK) != 0) (void) strcpy(svc_buf, LEGACY_UNKNOWN); } ! ! if (strlen(svc_buf) > COMPONENT_COLUMN_WIDTH) ! newsize = (*buf ? strlen(*buf) : 0) + strlen(svc_buf) + 2; ! else ! newsize = (*buf ? strlen(*buf) : 0) + ! COMPONENT_COLUMN_WIDTH + 2; ! newbuf = safe_malloc(newsize); ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! COMPONENT_COLUMN_WIDTH, svc_buf); free(svc_buf); - if (*buf) - free(*buf); - *buf = newbuf; } static void sortkey_service(char *buf, int reverse, scf_walkinfo_t *wip) { --- 1509,1520 ---- if (pg_get_single_val(wip->pg, "name", SCF_TYPE_ASTRING, svc_buf, max_scf_name_length + 1, EMPTY_OK) != 0) (void) strcpy(svc_buf, LEGACY_UNKNOWN); } ! sprint_str(buf, svc_buf, COMPONENT_COLUMN_WIDTH); free(svc_buf); } static void sortkey_service(char *buf, int reverse, scf_walkinfo_t *wip) {
*** 1589,1617 **** /* INST */ static void sprint_instance(char **buf, scf_walkinfo_t *wip) { ! char *tmp = safe_malloc(max_scf_name_length + 1); ! size_t newsize = (*buf ? strlen(*buf) : 0) + COMPONENT_COLUMN_WIDTH + 2; ! char *newbuf = safe_malloc(newsize); if (wip->pg == NULL) { ! if (scf_instance_get_name(wip->inst, tmp, max_scf_name_length + 1) < 0) scfdie(); } else { ! tmp[0] = '-'; ! tmp[1] = '\0'; } ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! COMPONENT_COLUMN_WIDTH, tmp); ! if (*buf) ! free(*buf); ! *buf = newbuf; ! free(tmp); } static void sortkey_instance(char *buf, int reverse, scf_walkinfo_t *wip) { --- 1529,1552 ---- /* INST */ static void sprint_instance(char **buf, scf_walkinfo_t *wip) { ! char *inst_buf = safe_malloc(max_scf_name_length + 1); if (wip->pg == NULL) { ! if (scf_instance_get_name(wip->inst, inst_buf, max_scf_name_length + 1) < 0) scfdie(); } else { ! inst_buf[0] = '-'; ! inst_buf[1] = '\0'; } ! ! sprint_str(buf, inst_buf, COMPONENT_COLUMN_WIDTH); ! free(inst_buf); } static void sortkey_instance(char *buf, int reverse, scf_walkinfo_t *wip) {
*** 1625,1636 **** } /* STIME */ #define STIME_COLUMN_WIDTH 8 #define FORMAT_TIME "%k:%M:%S" ! #define FORMAT_DATE "%b_%d " ! #define FORMAT_YEAR "%Y " /* * sprint_stime() will allocate a new buffer and snprintf the services's * state timestamp. If the timestamp is unavailable for some reason * a '-' is given instead. --- 1560,1571 ---- } /* STIME */ #define STIME_COLUMN_WIDTH 8 #define FORMAT_TIME "%k:%M:%S" ! #define FORMAT_DATE "%b_%d" ! #define FORMAT_YEAR "%Y" /* * sprint_stime() will allocate a new buffer and snprintf the services's * state timestamp. If the timestamp is unavailable for some reason * a '-' is given instead.
*** 1641,1652 **** int r; struct timeval tv; time_t then; struct tm *tm; char st_buf[STIME_COLUMN_WIDTH + 1]; - size_t newsize = (*buf ? strlen(*buf) : 0) + STIME_COLUMN_WIDTH + 2; - char *newbuf = safe_malloc(newsize); if (wip->pg == NULL) { r = get_restarter_time_prop(wip->inst, SCF_PROPERTY_STATE_TIMESTAMP, &tv, 0); } else { --- 1576,1585 ----
*** 1657,1668 **** if (r != 0) { /* * There's something amiss with our service * so we'll print a '-' for STIME. */ ! (void) snprintf(newbuf, newsize, "%s%-*s", *buf ? *buf : "", ! STIME_COLUMN_WIDTH + 1, "-"); } else { /* tv should be valid so we'll format it */ then = (time_t)tv.tv_sec; tm = localtime(&then); --- 1590,1600 ---- if (r != 0) { /* * There's something amiss with our service * so we'll print a '-' for STIME. */ ! sprint_str(buf, "-", STIME_COLUMN_WIDTH); } else { /* tv should be valid so we'll format it */ then = (time_t)tv.tv_sec; tm = localtime(&then);
*** 1679,1694 **** gettext(FORMAT_DATE), tm); } else { (void) strftime(st_buf, sizeof (st_buf), gettext(FORMAT_YEAR), tm); } ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! STIME_COLUMN_WIDTH + 1, st_buf); } - if (*buf) - free(*buf); - *buf = newbuf; } #define STIME_SORTKEY_WIDTH (sizeof (uint64_t) + sizeof (uint32_t)) /* ARGSUSED */ --- 1611,1622 ---- gettext(FORMAT_DATE), tm); } else { (void) strftime(st_buf, sizeof (st_buf), gettext(FORMAT_YEAR), tm); } ! sprint_str(buf, st_buf, STIME_COLUMN_WIDTH); } } #define STIME_SORTKEY_WIDTH (sizeof (uint64_t) + sizeof (uint32_t)) /* ARGSUSED */
*** 1729,1740 **** #define ZONE_COLUMN_WIDTH 16 /*ARGSUSED*/ static void sprint_zone(char **buf, scf_walkinfo_t *wip) { ! size_t newsize; ! char *newbuf, *zonename = g_zonename, b[ZONENAME_MAX]; if (zonename == NULL) { zoneid_t zoneid = getzoneid(); if (getzonenamebyid(zoneid, b, sizeof (b)) < 0) --- 1657,1667 ---- #define ZONE_COLUMN_WIDTH 16 /*ARGSUSED*/ static void sprint_zone(char **buf, scf_walkinfo_t *wip) { ! char *zonename = g_zonename, b[ZONENAME_MAX]; if (zonename == NULL) { zoneid_t zoneid = getzoneid(); if (getzonenamebyid(zoneid, b, sizeof (b)) < 0)
*** 1741,1762 **** uu_die(gettext("could not determine zone name")); zonename = b; } ! if (strlen(zonename) > ZONE_COLUMN_WIDTH) ! newsize = (*buf ? strlen(*buf) : 0) + strlen(zonename) + 2; ! else ! newsize = (*buf ? strlen(*buf) : 0) + ZONE_COLUMN_WIDTH + 2; ! ! newbuf = safe_malloc(newsize); ! (void) snprintf(newbuf, newsize, "%s%-*s ", *buf ? *buf : "", ! ZONE_COLUMN_WIDTH, zonename); ! ! if (*buf) ! free(*buf); ! *buf = newbuf; } static void sortkey_zone(char *buf, int reverse, scf_walkinfo_t *wip) { --- 1668,1678 ---- uu_die(gettext("could not determine zone name")); zonename = b; } ! sprint_str(buf, zonename, ZONE_COLUMN_WIDTH); } static void sortkey_zone(char *buf, int reverse, scf_walkinfo_t *wip) {
*** 1782,1801 **** FMRI_COLUMN_WIDTH, sortkey_fmri }, { "INST", COMPONENT_COLUMN_WIDTH, sprint_instance, COMPONENT_COLUMN_WIDTH, sortkey_instance }, { "N", 1, sprint_n, 1, sortkey_nstate }, { "NSTA", 4, sprint_nsta, 1, sortkey_nstate }, ! { "NSTATE", MAX_SCF_STATE_STRING_SZ - 1, sprint_nstate, 1, sortkey_nstate }, { "S", 2, sprint_s, 1, sortkey_state }, { "SCOPE", COMPONENT_COLUMN_WIDTH, sprint_scope, COMPONENT_COLUMN_WIDTH, sortkey_scope }, { "SN", 2, sprint_sn, 2, sortkey_sn }, { "SVC", COMPONENT_COLUMN_WIDTH, sprint_service, COMPONENT_COLUMN_WIDTH, sortkey_service }, { "STA", 4, sprint_sta, 1, sortkey_state }, ! { "STATE", MAX_SCF_STATE_STRING_SZ - 1 + 1, sprint_state, 1, sortkey_state }, { "STIME", STIME_COLUMN_WIDTH, sprint_stime, STIME_SORTKEY_WIDTH, sortkey_stime }, { "ZONE", ZONE_COLUMN_WIDTH, sprint_zone, ZONE_COLUMN_WIDTH, sortkey_zone }, --- 1698,1717 ---- FMRI_COLUMN_WIDTH, sortkey_fmri }, { "INST", COMPONENT_COLUMN_WIDTH, sprint_instance, COMPONENT_COLUMN_WIDTH, sortkey_instance }, { "N", 1, sprint_n, 1, sortkey_nstate }, { "NSTA", 4, sprint_nsta, 1, sortkey_nstate }, ! { "NSTATE", MAX_SCF_STATE_STRING_SZ, sprint_nstate, 1, sortkey_nstate }, { "S", 2, sprint_s, 1, sortkey_state }, { "SCOPE", COMPONENT_COLUMN_WIDTH, sprint_scope, COMPONENT_COLUMN_WIDTH, sortkey_scope }, { "SN", 2, sprint_sn, 2, sortkey_sn }, { "SVC", COMPONENT_COLUMN_WIDTH, sprint_service, COMPONENT_COLUMN_WIDTH, sortkey_service }, { "STA", 4, sprint_sta, 1, sortkey_state }, ! { "STATE", MAX_SCF_STATE_STRING_SZ, sprint_state, 1, sortkey_state }, { "STIME", STIME_COLUMN_WIDTH, sprint_stime, STIME_SORTKEY_WIDTH, sortkey_stime }, { "ZONE", ZONE_COLUMN_WIDTH, sprint_zone, ZONE_COLUMN_WIDTH, sortkey_zone },
*** 1867,1884 **** static void print_usage(const char *progname, FILE *f, boolean_t do_exit) { ! (void) fprintf(f, gettext( ! "Usage: %1$s [-aHpv] [-o col[,col ... ]] [-R restarter] " ! "[-sS col] [-Z | -z zone ]\n [<service> ...]\n" ! " %1$s -d | -D [-Hpv] [-o col[,col ... ]] [-sS col] " ! "[-Z | -z zone ]\n [<service> ...]\n" ! " %1$s [-l | -L] [-Z | -z zone] <service> ...\n" ! " %1$s -x [-v] [-Z | -z zone] [<service> ...]\n" ! " %1$s -?\n"), progname); if (do_exit) exit(UU_EXIT_USAGE); } --- 1783,1799 ---- static void print_usage(const char *progname, FILE *f, boolean_t do_exit) { ! (void) fprintf(f, gettext("usage:\n" ! "%1$s\t[-aHpv?] [-o col[,col]...] [-R FMRI-instance]... " ! "[-sS col]...\n\t[-z zone|-Z] [FMRI|pattern]...\n" ! "%1$s\t{-d|-D} -Hpv? [-o col[,col]...] [-sS col]... [-z zone|-Z]\n" ! "\t[FMRI|pattern]...\n" ! "%1$s\t{-l|-L} [-v] [-z zone|-Z] {FMRI|pattern}...\n" ! "%1$s\t-x [-v] [-z zone|-Z] [FMRI]...\n"), progname); if (do_exit) exit(UU_EXIT_USAGE); }
*** 3452,3462 **** zoneid_t *zids = NULL; char zonename[ZONENAME_MAX]; void (*errfunc)(const char *, ...); int show_all = 0; - int show_header = 1; int show_zones = 0; const char * const options = "aHpvno:R:s:S:dDlL?xZz:"; (void) setlocale(LC_ALL, ""); --- 3367,3376 ----
*** 3542,3552 **** break; case 'H': if (opt_mode == 'l' || opt_mode == 'x') argserr(progname); ! show_header = 0; break; case 'p': if (opt_mode == 'x') argserr(progname); --- 3456,3466 ---- break; case 'H': if (opt_mode == 'l' || opt_mode == 'x') argserr(progname); ! opt_scripted = 1; break; case 'p': if (opt_mode == 'x') argserr(progname);
*** 3921,3931 **** exit_status = missing; if (opt_columns == NULL) return (exit_status); ! if (show_header) print_header(); (void) uu_avl_walk(lines, print_line, NULL, 0); return (exit_status); --- 3835,3845 ---- exit_status = missing; if (opt_columns == NULL) return (exit_status); ! if (!opt_scripted) print_header(); (void) uu_avl_walk(lines, print_line, NULL, 0); return (exit_status);