From owner-svn-src-head@freebsd.org Fri Jun 23 15:09:10 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 582D0DA6538; Fri, 23 Jun 2017 15:09:10 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 27E4D3C75; Fri, 23 Jun 2017 15:09:10 +0000 (UTC) (envelope-from bapt@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v5NF992n078348; Fri, 23 Jun 2017 15:09:09 GMT (envelope-from bapt@FreeBSD.org) Received: (from bapt@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v5NF98Gi078344; Fri, 23 Jun 2017 15:09:08 GMT (envelope-from bapt@FreeBSD.org) Message-Id: <201706231509.v5NF98Gi078344@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bapt set sender to bapt@FreeBSD.org using -f From: Baptiste Daroussin Date: Fri, 23 Jun 2017 15:09:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r320270 - head/usr.sbin/sesutil X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 Jun 2017 15:09:10 -0000 Author: bapt Date: Fri Jun 23 15:09:08 2017 New Revision: 320270 URL: https://svnweb.freebsd.org/changeset/base/320270 Log: Directly print the extra status instead of filling a buffer then printing it. This prepares the code to make it libxo friendly Reviewed by: manu, Nikita Kozlov (nikita elyzion.net) MFC after: 2 weeks Sponsored by: Gandi.net Modified: head/usr.sbin/sesutil/Makefile head/usr.sbin/sesutil/eltsub.c head/usr.sbin/sesutil/eltsub.h head/usr.sbin/sesutil/sesutil.c Modified: head/usr.sbin/sesutil/Makefile ============================================================================== --- head/usr.sbin/sesutil/Makefile Fri Jun 23 15:02:49 2017 (r320269) +++ head/usr.sbin/sesutil/Makefile Fri Jun 23 15:09:08 2017 (r320270) @@ -4,6 +4,4 @@ PROG= sesutil SRCS= sesutil.c eltsub.c MAN= sesutil.8 -LIBADD= sbuf - .include Modified: head/usr.sbin/sesutil/eltsub.c ============================================================================== --- head/usr.sbin/sesutil/eltsub.c Fri Jun 23 15:02:49 2017 (r320269) +++ head/usr.sbin/sesutil/eltsub.c Fri Jun 23 15:09:08 2017 (r320270) @@ -32,9 +32,7 @@ * mjacob@feral.com */ -#include #include -#include #include #include @@ -142,53 +140,4 @@ scode2ascii(u_char code) snprintf(rbuf, sizeof(rbuf), "", code & 0xf); return (rbuf); } -} - -struct sbuf * -stat2sbuf(int eletype, u_char *cstat) -{ - struct sbuf *buf; - - buf = sbuf_new_auto(); - if (buf == NULL) - err(EXIT_FAILURE, "sbuf_new_auto()"); - - if (cstat[0] & 0x40) - sbuf_printf(buf, "\t\t- Predicted Failure\n"); - if (cstat[0] & 0x20) - sbuf_printf(buf, "\t\t- Disabled\n"); - if (cstat[0] & 0x10) - sbuf_printf(buf, "\t\t- Swapped\n"); - switch (eletype) { - case ELMTYP_DEVICE: - if (cstat[2] & 0x02) - sbuf_printf(buf, "\t\t- LED=locate\n"); - if (cstat[2] & 0x20) - sbuf_printf(buf, "\t\t- LED=fault\n"); - break; - case ELMTYP_ARRAY_DEV: - if (cstat[2] & 0x02) - sbuf_printf(buf, "\t\t- LED=locate\n"); - if (cstat[2] & 0x20) - sbuf_printf(buf, "\t\t- LED=fault\n"); - break; - case ELMTYP_FAN: - sbuf_printf(buf, "\t\t- Speed: %d rpm\n", - (((0x7 & cstat[1]) << 8) + cstat[2]) * 10); - break; - case ELMTYP_THERM: - if (cstat[2]) { - sbuf_printf(buf, "\t\t- Temperature: %d C\n", - cstat[2] - TEMPERATURE_OFFSET); - } else { - sbuf_printf(buf, "\t\t- Temperature: -reserved-\n"); - } - break; - case ELMTYP_VOM: - sbuf_printf(buf, "\t\t- Voltage: %.2f V\n", - be16dec(cstat + 2) / 100.0); - break; - } - sbuf_finish(buf); - return (buf); } Modified: head/usr.sbin/sesutil/eltsub.h ============================================================================== --- head/usr.sbin/sesutil/eltsub.h Fri Jun 23 15:02:49 2017 (r320269) +++ head/usr.sbin/sesutil/eltsub.h Fri Jun 23 15:09:08 2017 (r320270) @@ -34,4 +34,3 @@ const char *geteltnm(int); const char *scode2ascii(u_char); -struct sbuf *stat2sbuf(int, u_char *); Modified: head/usr.sbin/sesutil/sesutil.c ============================================================================== --- head/usr.sbin/sesutil/sesutil.c Fri Jun 23 15:02:49 2017 (r320269) +++ head/usr.sbin/sesutil/sesutil.c Fri Jun 23 15:09:08 2017 (r320270) @@ -29,10 +29,10 @@ #include __FBSDID("$FreeBSD$"); +#include #include #include #include -#include #include #include @@ -56,6 +56,7 @@ static int fault(int argc, char **argv); static int locate(int argc, char **argv); static int objmap(int argc, char **argv); static int sesled(int argc, char **argv, bool fault); +static void sesutil_print(bool *title, const char *fmt, ...) __printflike(2,3); static struct command { const char *name; @@ -303,10 +304,74 @@ fault(int argc, char **argv) return (sesled(argc, argv, true)); } +#define TEMPERATURE_OFFSET 20 +static void +sesutil_print(bool *title, const char *fmt, ...) +{ + va_list args; + + if (!*title) { + printf("\t\tExtra status:\n"); + *title = true; + } + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); +} + +static void +print_extra_status(int eletype, u_char *cstat) +{ + bool title = false; + + if (cstat[0] & 0x40) { + sesutil_print(&title, "\t\t- Predicted Failure\n"); + } + if (cstat[0] & 0x20) { + sesutil_print(&title, "\t\t- Disabled\n"); + } + if (cstat[0] & 0x10) { + sesutil_print(&title, "\t\t- Swapped\n"); + } + switch (eletype) { + case ELMTYP_DEVICE: + if (cstat[2] & 0x02) { + sesutil_print(&title, "\t\t- LED=locate\n"); + } + if (cstat[2] & 0x20) { + sesutil_print(&title, "\t\t- LED=fault\n"); + } + break; + case ELMTYP_ARRAY_DEV: + if (cstat[2] & 0x02) { + sesutil_print(&title, "\t\t- LED=locate\n"); + } + if (cstat[2] & 0x20) { + sesutil_print(&title, "\t\t- LED=fault\n"); + } + break; + case ELMTYP_FAN: + sesutil_print(&title, "\t\t- Speed: %d rpm\n", + (((0x7 & cstat[1]) << 8) + cstat[2]) * 10); + break; + case ELMTYP_THERM: + if (cstat[2]) { + sesutil_print(&title, "\t\t- Temperature: %d C\n", + cstat[2] - TEMPERATURE_OFFSET); + } else { + sesutil_print(&title, "\t\t- Temperature: -reserved-\n"); + } + break; + case ELMTYP_VOM: + sesutil_print(&title, "\t\t- Voltage: %.2f V\n", + be16dec(cstat + 2) / 100.0); + break; + } +} + static int objmap(int argc, char **argv __unused) { - struct sbuf *extra; encioc_string_t stri; encioc_elm_devnames_t e_devname; encioc_elm_status_t e_status; @@ -422,12 +487,7 @@ objmap(int argc, char **argv __unused) printf("\t\tDevice Names: %s\n", e_devname.elm_devnames); } - extra = stat2sbuf(e_ptr[j].elm_type, e_status.cstat); - if (sbuf_len(extra) > 0) { - printf("\t\tExtra status:\n%s", - sbuf_data(extra)); - } - sbuf_delete(extra); + print_extra_status(e_ptr[j].elm_type, e_status.cstat); free(e_devname.elm_devnames); } free(e_ptr);