FreeBSD Bugzilla – Attachment 157719 Details for
Bug 200746
[PATCH] Add libxo support to jls
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
jls libxo support 3
jls_libxo_3.diff (text/plain), 10.77 KB, created by
Emmanuel Vadot
on 2015-06-13 20:26:12 UTC
(
hide
)
Description:
jls libxo support 3
Filename:
MIME Type:
Creator:
Emmanuel Vadot
Created:
2015-06-13 20:26:12 UTC
Size:
10.77 KB
patch
obsolete
>diff --git a/usr.sbin/jls/Makefile b/usr.sbin/jls/Makefile >index d90d094..4c1de74 100644 >--- a/usr.sbin/jls/Makefile >+++ b/usr.sbin/jls/Makefile >@@ -4,7 +4,7 @@ > > PROG= jls > MAN= jls.8 >-LIBADD= jail >+LIBADD= jail xo > > .if ${MK_INET6_SUPPORT} != "no" > CFLAGS+= -DINET6 >diff --git a/usr.sbin/jls/jls.8 b/usr.sbin/jls/jls.8 >index 15a80d4..830d476 100644 >--- a/usr.sbin/jls/jls.8 >+++ b/usr.sbin/jls/jls.8 >@@ -33,6 +33,7 @@ > .Nd "list jails" > .Sh SYNOPSIS > .Nm >+.Op Fl -libxo > .Op Fl dhNnqsv > .Op Fl j Ar jail > .Op Ar parameter ... >diff --git a/usr.sbin/jls/jls.c b/usr.sbin/jls/jls.c >index b1e28fb..6a24dae 100644 >--- a/usr.sbin/jls/jls.c >+++ b/usr.sbin/jls/jls.c >@@ -2,6 +2,7 @@ > * Copyright (c) 2003 Mike Barcroft <mike@FreeBSD.org> > * Copyright (c) 2008 Bjoern A. Zeeb <bz@FreeBSD.org> > * Copyright (c) 2009 James Gritton <jamie@FreeBSD.org> >+ * Copyright (c) 2015 Emmanuel Vadot <manu@bocal.org> > * All rights reserved. > * > * Redistribution and use in source and binary forms, with or without >@@ -45,6 +46,7 @@ __FBSDID("$FreeBSD$"); > #include <stdlib.h> > #include <string.h> > #include <unistd.h> >+#include <libxo/xo.h> > > #define JP_USER 0x01000000 > #define JP_OPT 0x02000000 >@@ -73,7 +75,7 @@ static int sort_param(const void *a, const void *b); > static char *noname(const char *name); > static char *nononame(const char *name); > static int print_jail(int pflags, int jflags); >-static void quoted_print(char *str); >+static void quoted_print(int pflags, char *name, char *value); > > int > main(int argc, char **argv) >@@ -81,6 +83,10 @@ main(int argc, char **argv) > char *dot, *ep, *jname, *pname; > int c, i, jflags, jid, lastjid, pflags, spc; > >+ argc = xo_parse_args(argc, argv); >+ if (argc < 0) >+ exit(1); >+ > jname = NULL; > pflags = jflags = jid = 0; > while ((c = getopt(argc, argv, "adj:hNnqsv")) >= 0) >@@ -119,7 +125,7 @@ main(int argc, char **argv) > PRINT_VERBOSE; > break; > default: >- errx(1, "usage: jls [-dhNnqv] [-j jail] [param ...]"); >+ xo_errx(1, "usage: jls [-dhNnqv] [-j jail] [param ...]"); > } > > #ifdef INET6 >@@ -196,42 +202,45 @@ main(int argc, char **argv) > add_param("lastjid", &lastjid, sizeof(lastjid), NULL, 0); > > /* Print a header line if requested. */ >- if (pflags & PRINT_VERBOSE) >- printf(" JID Hostname Path\n" >- " Name State\n" >- " CPUSetID\n" >- " IP Address(es)\n"); >+ if (pflags & PRINT_VERBOSE) { >+ xo_emit("{P: }{T:JID}{P: }{T:Hostname}{P:/%22s}{T:Path}\n", ""); >+ xo_emit("{P:/%8s}{T:Name}{Pd:/%26s}{T:State}\n", "", ""); >+ xo_emit("{P:/%8s}{T:CPUSetID}\n", ""); >+ xo_emit("{P:/%8s}{T:IP Address(es)}\n", ""); >+ } > else if (pflags & PRINT_DEFAULT) > if (pflags & PRINT_JAIL_NAME) >- printf(" JID IP Address " >- "Hostname Path\n"); >+ xo_emit("{P: }{T:JID}{P:/%13s}{T:IP Address}{P:/%6s}" >+ "{T:Hostname}{P:/%22s}{T:Path}\n", "", "", ""); > else >- printf(" JID IP Address " >- "Hostname Path\n"); >+ xo_emit("{P: }{T:JID}{P: }{T:IP Address}{P:/%6s}" >+ "{T:Hostname}{P:/%22s}{T:Path}\n", "", ""); > else if (pflags & PRINT_HEADER) { > for (i = spc = 0; i < nparams; i++) > if (params[i].jp_flags & JP_USER) { > if (spc) >- putchar(' '); >+ xo_emit("{P: }"); > else > spc = 1; >- fputs(params[i].jp_name, stdout); >+ xo_emit(params[i].jp_name, stdout); > } >- putchar('\n'); >+ xo_emit("{P:\n}"); > } > >+ xo_open_list("jails"); > /* Fetch the jail(s) and print the paramters. */ > if (jid != 0 || jname != NULL) { > if (print_jail(pflags, jflags) < 0) >- errx(1, "%s", jail_errmsg); >+ xo_errx(1, "%s", jail_errmsg); > } else { > for (lastjid = 0; > (lastjid = print_jail(pflags, jflags)) >= 0; ) > ; > if (errno != 0 && errno != ENOENT) >- errx(1, "%s", jail_errmsg); >+ xo_errx(1, "%s", jail_errmsg); > } >- >+ xo_close_list("jails"); >+ xo_finish(); > return (0); > } > >@@ -248,7 +257,7 @@ add_param(const char *name, void *value, size_t valuelen, > if (!strcmp(name, "all")) { > tnparams = jailparam_all(&tparams); > if (tnparams < 0) >- errx(1, "%s", jail_errmsg); >+ xo_errx(1, "%s", jail_errmsg); > qsort(tparams, (size_t)tnparams, sizeof(struct jailparam), > sort_param); > for (i = 0; i < tnparams; i++) >@@ -263,7 +272,7 @@ add_param(const char *name, void *value, size_t valuelen, > if (!strcmp(name, params[i].jp_name)) { > if (value != NULL && jailparam_import_raw(params + i, > value, valuelen) < 0) >- errx(1, "%s", jail_errmsg); >+ xo_errx(1, "%s", jail_errmsg); > params[i].jp_flags |= flags; > if (source != NULL) > jailparam_free(source, 1); >@@ -301,7 +310,7 @@ add_param(const char *name, void *value, size_t valuelen, > nparams--; > return (-1); > } >- errx(1, "%s", jail_errmsg); >+ xo_errx(1, "%s", jail_errmsg); > } > param->jp_flags = flags; > return param - params; >@@ -362,7 +371,7 @@ nononame(const char *name) > static int > print_jail(int pflags, int jflags) > { >- char *nname; >+ char *nname, *xo_nname; > char **param_values; > int i, ai, jid, count, n, spc; > char ipbuf[INET6_ADDRSTRLEN]; >@@ -370,18 +379,20 @@ print_jail(int pflags, int jflags) > jid = jailparam_get(params, nparams, jflags); > if (jid < 0) > return jid; >+ >+ xo_open_instance("jails"); >+ > if (pflags & PRINT_VERBOSE) { >- printf("%6d %-29.29s %.74s\n" >- "%6s %-29.29s %.74s\n" >- "%6s %-6d\n", >- *(int *)params[0].jp_value, >- (char *)params[1].jp_value, >- (char *)params[2].jp_value, >- "", >- (char *)params[3].jp_value, >- *(int *)params[4].jp_value ? "DYING" : "ACTIVE", >- "", >- *(int *)params[5].jp_value); >+ xo_emit("{:jid/%6d}{P: }{e:hostname/%s}{d:hostname/%-29.29s}{P: }{:path/%.74s}\n", >+ *(int *)params[0].jp_value, >+ (char *)params[1].jp_value, >+ (char *)params[1].jp_value, >+ (char *)params[2].jp_value); >+ xo_emit("{P: }{e:name/%s}{d:name/%-29.29s}{P: }{:state/%.74s}\n", >+ (char *)params[3].jp_value, >+ (char *)params[3].jp_value, >+ *(int *)params[4].jp_value ? "DYING" : "ACTIVE"); >+ xo_emit("{P: }{:cpusetid/%d}\n", *(int *)params[5].jp_value); > n = 6; > #ifdef INET > if (ip4_ok && !strcmp(params[n].jp_name, "ip4.addr")) { >@@ -391,8 +402,9 @@ print_jail(int pflags, int jflags) > &((struct in_addr *)params[n].jp_value)[ai], > ipbuf, sizeof(ipbuf)) == NULL) > err(1, "inet_ntop"); >- else >- printf("%6s %-15.15s\n", "", ipbuf); >+ else { >+ xo_emit("{P: }{l:ipv4_addrs}{P:\n}", ipbuf); >+ } > n++; > } > #endif >@@ -406,23 +418,30 @@ print_jail(int pflags, int jflags) > ipbuf, sizeof(ipbuf)) == NULL) > err(1, "inet_ntop"); > else >- printf("%6s %s\n", "", ipbuf); >+ xo_emit("{P: }{l:ipv6_addrs}{P:\n}", ipbuf); > n++; > } > #endif > } else if (pflags & PRINT_DEFAULT) { > if (pflags & PRINT_JAIL_NAME) >- printf(" %-15s ", (char *)params[0].jp_value); >+ xo_emit("{P: }{e:name/%s}{d:name/%-15s}{P: }", >+ (char *)params[0].jp_value, >+ (char *)params[0].jp_value); > else >- printf("%6d ", *(int *)params[0].jp_value); >- printf("%-15.15s %-29.29s %.74s\n", >+ xo_emit("{:jid/%6d}{P: }", *(int *)params[0].jp_value); >+ xo_emit("{e:ipv4/%s}{d:ipv4/%-15.15s}{P: }{e:hostname/%s}{d:hostname/%-29.29s}{P: }{:path/%.74s}\n", > #ifdef INET >+ (!ip4_ok || params[1].jp_valuelen == 0) ? "" >+ : inet_ntoa(*(struct in_addr *)params[1].jp_value), > (!ip4_ok || params[1].jp_valuelen == 0) ? "-" > : inet_ntoa(*(struct in_addr *)params[1].jp_value), > (char *)params[2-!ip4_ok].jp_value, >+ (char *)params[2-!ip4_ok].jp_value, > (char *)params[3-!ip4_ok].jp_value); > #else > "-", >+ "-", >+ (char *)params[1].jp_value, > (char *)params[1].jp_value, > (char *)params[2].jp_value); > #endif >@@ -433,7 +452,7 @@ print_jail(int pflags, int jflags) > continue; > param_values[i] = jailparam_export(params + i); > if (param_values[i] == NULL) >- errx(1, "%s", jail_errmsg); >+ xo_errx(1, "%s", jail_errmsg); > } > for (i = spc = 0; i < nparams; i++) { > if (!(params[i].jp_flags & JP_USER)) >@@ -446,7 +465,7 @@ print_jail(int pflags, int jflags) > JAIL_SYS_NEW))) > continue; > if (spc) >- putchar(' '); >+ xo_emit("{P: }"); > else > spc = 1; > if (pflags & PRINT_NAMEVAL) { >@@ -456,63 +475,79 @@ print_jail(int pflags, int jflags) > */ > if (params[i].jp_flags & > (JP_BOOL | JP_NOBOOL)) { >- if (*(int *)params[i].jp_value) >- printf("%s", params[i].jp_name); >+ if (*(int *)params[i].jp_value) { >+ asprintf(&xo_nname, "{en:%s/true}", params[i].jp_name); >+ xo_emit(xo_nname); >+ xo_emit("{d:/%s}", params[i].jp_name); >+ } > else { > nname = (params[i].jp_flags & > JP_NOBOOL) ? > nononame(params[i].jp_name) > : noname(params[i].jp_name); >- printf("%s", nname); >+ if (params[i].jp_flags & JP_NOBOOL) { >+ asprintf(&xo_nname, "{en:%s/true}", params[i].jp_name); >+ xo_emit(xo_nname); >+ } else { >+ asprintf(&xo_nname, "{en:%s/false}", params[i].jp_name); >+ xo_emit(xo_nname); >+ } >+ xo_emit("{d:/%s}", nname); > free(nname); > } >+ free(xo_nname); > continue; > } >- printf("%s=", params[i].jp_name); >+ xo_emit("{d:%s}=", params[i].jp_name); > } > if (params[i].jp_valuelen == 0) { > if (pflags & PRINT_QUOTED) >- printf("\"\""); >+ xo_emit("{P:\"\"}"); > else if (!(pflags & PRINT_NAMEVAL)) >- putchar('-'); >- } else >- quoted_print(param_values[i]); >+ xo_emit("{P:-}"); >+ } else { >+ quoted_print(pflags, params[i].jp_name, param_values[i]); >+ } > } >- putchar('\n'); >+ xo_emit("{P:\n}"); > for (i = 0; i < nparams; i++) > if (params[i].jp_flags & JP_USER) > free(param_values[i]); > } >+ >+ xo_close_instance("jails"); > return (jid); > } > > static void >-quoted_print(char *str) >+quoted_print(int pflags, char *name, char *value) > { >- int c, qc; >- char *p = str; >+ int qc; >+ char *p = value; >+ char *param_name_value; >+ > >- /* An empty string needs quoting. */ > if (!*p) { >- fputs("\"\"", stdout); >+ asprintf(¶m_name_value, "{k:%s}{d:%s/\"\"}", name, name); >+ xo_emit(param_name_value); >+ free(param_name_value); > return; > } > >- /* >- * The value will be surrounded by quotes if it contains spaces >- * or quotes. >- */ >+ asprintf(¶m_name_value, "{:%s/%%s}", name); >+ > qc = strchr(p, '\'') ? '"' >- : strchr(p, '"') ? '\'' >- : strchr(p, ' ') || strchr(p, '\t') ? '"' >- : 0; >- if (qc) >- putchar(qc); >- while ((c = *p++)) { >- if (c == '\\' || c == qc) >- putchar('\\'); >- putchar(c); >- } >- if (qc) >- putchar(qc); >+ : strchr(p, '"') ? '\'' >+ : strchr(p, ' ') || strchr(p, '\t') ? '"' >+ : 0; >+ >+ if (qc && pflags & PRINT_QUOTED) >+ xo_emit("{P:/%c}", qc); >+ >+ xo_emit(param_name_value, value); >+ >+ free(param_name_value); >+ >+ if (qc && pflags & PRINT_QUOTED) >+ xo_emit("{P:/%c}", qc); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 200746
:
157588
|
157601
| 157719