Skip to content

Commit 316409e

Browse files
committed
LocalIP: cleanup printing code
1 parent f0fc38b commit 316409e

1 file changed

Lines changed: 55 additions & 50 deletions

File tree

src/modules/localip/localip.c

Lines changed: 55 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -33,57 +33,70 @@ static void formatKey(const FFLocalIpOptions* options, FFLocalIpResult* ip, uint
3333
}
3434
}
3535

36-
static void printIp(FFLocalIpResult* ip, bool markDefaultRoute)
36+
static void appendSpeed(FFLocalIpResult* ip, FFstrbuf* strbuf)
37+
{
38+
if (ip->speed >= 1000000)
39+
{
40+
if (instance.config.display.fractionNdigits >= 0)
41+
ffStrbufAppendF(strbuf, "%.*f Tbps", instance.config.display.fractionNdigits, ip->speed / 1000000.0);
42+
else
43+
ffStrbufAppendF(strbuf, "%g Tbps", ip->speed / 1000000.0);
44+
}
45+
else if (ip->speed >= 1000)
46+
{
47+
if (instance.config.display.fractionNdigits >= 0)
48+
ffStrbufAppendF(strbuf, "%.*f Gbps", instance.config.display.fractionNdigits, ip->speed / 1000.0);
49+
else
50+
ffStrbufAppendF(strbuf, "%g Gbps", ip->speed / 1000.0);
51+
}
52+
else
53+
ffStrbufAppendF(strbuf, "%u Mbps", (unsigned) ip->speed);
54+
}
55+
56+
static void printIp(FFLocalIpResult* ip, bool markDefaultRoute, FFstrbuf* buffer)
3757
{
38-
bool flag = false;
3958
if (ip->ipv4.length)
4059
{
41-
ffStrbufWriteTo(&ip->ipv4, stdout);
42-
flag = true;
60+
ffStrbufAppend(buffer, &ip->ipv4);
4361
}
4462
if (ip->ipv6.length)
4563
{
46-
if (flag) putchar(' ');
47-
ffStrbufWriteTo(&ip->ipv6, stdout);
48-
flag = true;
64+
if (buffer->length) ffStrbufAppendC(buffer, ' ');
65+
ffStrbufAppend(buffer, &ip->ipv6);
4966
}
5067
if (ip->mac.length)
5168
{
52-
if (flag)
53-
printf(" (%s)", ip->mac.chars);
69+
if (buffer->length)
70+
ffStrbufAppendF(buffer, " (%s)", ip->mac.chars);
5471
else
55-
ffStrbufWriteTo(&ip->mac, stdout);
56-
flag = true;
72+
ffStrbufAppend(buffer, &ip->mac);
5773
}
5874
if (ip->mtu > 0 || ip->speed > 0)
5975
{
76+
bool flag = buffer->length > 0;
6077
if (flag)
61-
fputs(" [", stdout);
78+
ffStrbufAppendS(buffer, " [");
6279
if (ip->speed > 0)
6380
{
64-
if (ip->speed >= 1000000)
65-
printf("%g Tbps", ip->speed / 1000000.0);
66-
else if (ip->speed >= 1000)
67-
printf("Speed %g Gbps", ip->speed / 1000.0);
68-
else
69-
printf("Speed %u Mbps", (unsigned) ip->speed);
70-
7181
if (ip->mtu > 0)
72-
fputs(" / ", stdout);
82+
ffStrbufAppendS(buffer, "Speed ");
83+
appendSpeed(ip, buffer);
84+
if (ip->mtu > 0)
85+
ffStrbufAppendS(buffer, " / MTU ");
7386
}
7487
if (ip->mtu > 0)
75-
printf("MTU %u", (unsigned) ip->mtu);
76-
putchar(']');
77-
flag = true;
88+
ffStrbufAppendF(buffer, "%u", (unsigned) ip->mtu);
89+
if (flag)
90+
ffStrbufAppendC(buffer, ']');
7891
}
79-
if (ip->flags.length) {
80-
if (flag) fputs(" <", stdout);
81-
ffStrbufWriteTo(&ip->flags, stdout);
82-
putchar('>');
83-
flag = true;
92+
if (ip->flags.length)
93+
{
94+
if (buffer->length) ffStrbufAppendS(buffer, " <");
95+
ffStrbufAppend(buffer, &ip->flags);
96+
ffStrbufAppendC(buffer, '>');
8497
}
85-
if (markDefaultRoute && flag && ip->defaultRoute)
86-
fputs(" *", stdout);
98+
if (markDefaultRoute && ip->defaultRoute)
99+
ffStrbufAppendS(buffer, " *");
87100
}
88101

89102
void ffPrintLocalIp(FFLocalIpOptions* options)
@@ -106,21 +119,20 @@ void ffPrintLocalIp(FFLocalIpOptions* options)
106119

107120
ffListSort(&results, (const void*) sortIps);
108121

122+
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
123+
109124
if (options->showType & FF_LOCALIP_TYPE_COMPACT_BIT)
110125
{
111126
ffPrintLogoAndKey(FF_LOCALIP_DISPLAY_NAME, 0, &options->moduleArgs, FF_PRINT_TYPE_DEFAULT);
112127

113-
bool flag = false;
114-
115128
FF_LIST_FOR_EACH(FFLocalIpResult, ip, results)
116129
{
117-
if (flag)
118-
fputs(" - ", stdout);
119-
else
120-
flag = true;
121-
printIp(ip, false);
130+
if (buffer.length)
131+
ffStrbufAppendS(&buffer, " - ");
132+
printIp(ip, false, &buffer);
122133
}
123-
putchar('\n');
134+
ffStrbufPutTo(&buffer, stdout);
135+
ffStrbufClear(&buffer);
124136
}
125137
else
126138
{
@@ -133,33 +145,26 @@ void ffPrintLocalIp(FFLocalIpOptions* options)
133145
if(options->moduleArgs.outputFormat.length == 0)
134146
{
135147
ffPrintLogoAndKey(key.chars, 0, &options->moduleArgs, FF_PRINT_TYPE_NO_CUSTOM_KEY);
136-
printIp(ip, !(options->showType & FF_LOCALIP_TYPE_DEFAULT_ROUTE_ONLY_BIT));
137-
putchar('\n');
148+
printIp(ip, !(options->showType & FF_LOCALIP_TYPE_DEFAULT_ROUTE_ONLY_BIT), &buffer);
149+
ffStrbufPutTo(&buffer, stdout);
138150
}
139151
else
140152
{
141-
FF_STRBUF_AUTO_DESTROY speedStr = ffStrbufCreate();
142153
if (ip->speed > 0)
143-
{
144-
if (ip->speed >= 1000000)
145-
ffStrbufSetF(&speedStr, "%g Tbps", ip->speed / 1000000.0);
146-
else if (ip->speed >= 1000)
147-
ffStrbufSetF(&speedStr, "%g Gbps", ip->speed / 1000.0);
148-
else
149-
ffStrbufSetF(&speedStr, "%u Mbps", (unsigned) ip->speed);
150-
}
154+
appendSpeed(ip, &buffer);
151155
FF_PRINT_FORMAT_CHECKED(key.chars, 0, &options->moduleArgs, FF_PRINT_TYPE_NO_CUSTOM_KEY, ((FFformatarg[]){
152156
FF_FORMAT_ARG(ip->ipv4, "ipv4"),
153157
FF_FORMAT_ARG(ip->ipv6, "ipv6"),
154158
FF_FORMAT_ARG(ip->mac, "mac"),
155159
FF_FORMAT_ARG(ip->name, "ifname"),
156160
FF_FORMAT_ARG(ip->defaultRoute, "is-default-route"),
157161
FF_FORMAT_ARG(ip->mtu, "mtu"),
158-
FF_FORMAT_ARG(speedStr, "speed"),
162+
FF_FORMAT_ARG(buffer, "speed"),
159163
FF_FORMAT_ARG(ip->flags, "flags"),
160164
}));
161165
}
162166
++index;
167+
ffStrbufClear(&buffer);
163168
}
164169
}
165170

0 commit comments

Comments
 (0)