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);