-
-
Notifications
You must be signed in to change notification settings - Fork 444
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Partial code improvements with respect to Clang 19 warnings #1516
base: main
Are you sure you want to change the base?
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -428,23 +428,23 @@ void Row_printNanoseconds(RichString* str, unsigned long long totalNanoseconds, | |
} | ||
|
||
unsigned long long totalSeconds = totalMicroseconds / 1000000; | ||
unsigned long microseconds = totalMicroseconds % 1000000; | ||
uint32_t microseconds = totalMicroseconds % 1000000; | ||
if (totalSeconds < 60) { | ||
int width = 5; | ||
unsigned long fraction = microseconds / 10; | ||
uint32_t fraction = microseconds / 10; | ||
if (totalSeconds >= 10) { | ||
width--; | ||
fraction /= 10; | ||
} | ||
len = xSnprintf(buffer, sizeof(buffer), "%u.%0*lus ", (unsigned int)totalSeconds, width, fraction); | ||
len = xSnprintf(buffer, sizeof(buffer), "%u.%0*lus ", (unsigned int)totalSeconds, width, (unsigned long)fraction); | ||
RichString_appendnAscii(str, baseColor, buffer, len); | ||
return; | ||
} | ||
|
||
if (totalSeconds < 600) { | ||
unsigned int minutes = totalSeconds / 60; | ||
unsigned int seconds = totalSeconds % 60; | ||
unsigned int milliseconds = microseconds / 1000; | ||
unsigned int minutes = (unsigned int)totalSeconds / 60; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Shouldn't the cast here happen after the division? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not necessary because of the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not necessarily, as Won't happen in this case based on the previous check, but the correctness should take priority here. |
||
unsigned int seconds = (unsigned int)totalSeconds % 60; | ||
unsigned int milliseconds = (unsigned int)(microseconds / 1000); | ||
len = xSnprintf(buffer, sizeof(buffer), "%u:%02u.%03u ", minutes, seconds, milliseconds); | ||
RichString_appendnAscii(str, baseColor, buffer, len); | ||
return; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This one is a little beyond my knowledge. According to man pages, the
n
inmvaddnstr
refers to number of "characters" to print. However, what I really want to limit is the number of terminal columns, not the number of Unicode characters (this distinction is needed if East Asian Wide characters are in the strings).Perhaps a good way is to test how this function call would output, would it be "
12
" or just "1
":There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What about
wcswidth(3)
?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What I wish is a function that does an inverse of
wcswidth(3)
.wcswidth()
returns the terminal column width given a string and a number of (Unicode) characters limit. What I wished is retrieving the number of characters (or number of bytes) given a string and a column width limit.RichString_appendnWideColumns()
might give the closest I need, but I want a function that operates on aconst char*
rather than aRichString
object. Maybe I would write one from scratch?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unfortunately that is easier said than actual done, but based on the fact that
wcswidth
returns >=0 you can probably build something like this by callingwcwidth(3)
for each character in turn until you overshoot the limit, in which case you know the last character was too much (this accounts for zero-width-combiners and other special cases). The down-side is, that you will need to transform theconst char*
intowchar_t*
first, thus having this functionality live with the other RichString functions might be reasonable.NB: There's actually an issue that might benefit from this functionality in #462 IIRC.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@BenBE Yes, I'm aware of PR #462. And perhaps PR #1231 can benefit, too, as I wish this function would work as a word wrapper that is also CJK-aware.