@@ -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
89102void 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