summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
5f23d5b)
The alignment of the "[ OK ]" and "[FAILED]" status marks to the right
side of the terminal makes it difficult to link them with the messages
on the left if your console is wide.
I considered the options:
1. Align them to the 80th column regardless of the console width.
Disadvantage - either:
- truncating messages needlessly, not using available space; or
- If the message is long, write the mark over it. => ugly
2. Write them to the 80th column for short messages,
and further to the right for longer ones.
Disadvantage:
- jagged look
3. Write the marks on the left, before the message.
Disadvantage:
- Breaks tradition from RHL.
Advantages:
+ slightly simpler code
+ Will annoy holy-traditionalists.
I chose option 3.
BTW, Debian now uses similar marks on the left with its makefile-style
boot.
Special values of the "status" argument to status_vprintf are:
NULL - no status mark, no message indentation
"" - no status mark, message indented as if the mark was there
unit_add_to_dbus_queue(u);
unit_add_to_dbus_queue(u);
- unit_status_printf(u, NULL, "Starting %s...", unit_description(u));
+ unit_status_printf(u, "", "Starting %s...", unit_description(u));
return UNIT_VTABLE(u)->start(u);
}
return UNIT_VTABLE(u)->start(u);
}
unit_add_to_dbus_queue(u);
unit_add_to_dbus_queue(u);
- unit_status_printf(u, NULL, "Stopping %s...", unit_description(u));
+ unit_status_printf(u, "", "Stopping %s...", unit_description(u));
return UNIT_VTABLE(u)->stop(u);
}
return UNIT_VTABLE(u)->stop(u);
}
}
void status_vprintf(const char *status, bool ellipse, const char *format, va_list ap) {
}
void status_vprintf(const char *status, bool ellipse, const char *format, va_list ap) {
- char *s = NULL, *spaces = NULL, *e;
- int fd = -1, c;
- size_t emax, sl, left;
+ char *s = NULL;
+ static const char status_indent[] = " "; /* "[" STATUS "] " */
+ int fd = -1;
struct iovec iovec[5];
int n = 0;
assert(format);
struct iovec iovec[5];
int n = 0;
assert(format);
- /* This independent of logging, as status messages are
+ /* This is independent of logging, as status messages are
* optional and go exclusively to the console. */
if (vasprintf(&s, format, ap) < 0)
* optional and go exclusively to the console. */
if (vasprintf(&s, format, ap) < 0)
goto finish;
if (ellipse) {
goto finish;
if (ellipse) {
+ char *e;
+ size_t emax, sl;
+ int c;
+
c = fd_columns(fd);
if (c <= 0)
c = 80;
c = fd_columns(fd);
if (c <= 0)
c = 80;
- if (status) {
- sl = 2 + 6 + 1; /* " [" status "]" */
- emax = (size_t) c > sl ? c - sl - 1 : 0;
- } else
- emax = c - 1;
+ sl = status ? strlen(status_indent) : 0;
+
+ emax = c - sl - 1;
+ if (emax < 3)
+ emax = 3;
e = ellipsize(s, emax, 75);
if (e) {
e = ellipsize(s, emax, 75);
if (e) {
- IOVEC_SET_STRING(iovec[n++], s);
- if (ellipse) {
- sl = strlen(s);
- left = emax > sl ? emax - sl : 0;
- if (left > 0) {
- spaces = malloc(left);
- if (spaces) {
- memset(spaces, ' ', left);
- iovec[n].iov_base = spaces;
- iovec[n].iov_len = left;
- n++;
- }
- }
+ if (status) {
+ if (!isempty(status)) {
+ IOVEC_SET_STRING(iovec[n++], "[");
+ IOVEC_SET_STRING(iovec[n++], status);
+ IOVEC_SET_STRING(iovec[n++], "] ");
+ } else
+ IOVEC_SET_STRING(iovec[n++], status_indent);
- if (status) {
- IOVEC_SET_STRING(iovec[n++], " [");
- IOVEC_SET_STRING(iovec[n++], status);
- IOVEC_SET_STRING(iovec[n++], "]\n");
- } else
- IOVEC_SET_STRING(iovec[n++], "\n");
+ IOVEC_SET_STRING(iovec[n++], s);
+ IOVEC_SET_STRING(iovec[n++], "\n");
writev(fd, iovec, n);
finish:
free(s);
writev(fd, iovec, n);
finish:
free(s);
if (fd >= 0)
close_nointr_nofail(fd);
if (fd >= 0)
close_nointr_nofail(fd);