1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 01:27:34 +00:00

AK: Use size_t for the length of strings

Using int was a mistake. This patch changes String, StringImpl,
StringView and StringBuilder to use size_t instead of int for lengths.
Obviously a lot of code needs to change as a result of this.
This commit is contained in:
Andreas Kling 2019-12-09 17:45:40 +01:00
parent 1726c17d0d
commit 6f4c380d95
54 changed files with 387 additions and 377 deletions

View file

@ -21,7 +21,7 @@ void LineEditor::add_to_history(const String& line)
void LineEditor::clear_line()
{
for (int i = 0; i < m_cursor; ++i)
for (size_t i = 0; i < m_cursor; ++i)
fputc(0x8, stdout);
fputs("\033[K", stdout);
fflush(stdout);
@ -31,10 +31,10 @@ void LineEditor::clear_line()
void LineEditor::append(const String& string)
{
m_buffer.append(string.characters(), string.length());
m_buffer.append(string.characters(), (int)string.length());
fputs(string.characters(), stdout);
fflush(stdout);
m_cursor = m_buffer.size();
m_cursor = (size_t)m_buffer.size();
}
void LineEditor::cache_path()
@ -68,9 +68,9 @@ void LineEditor::cache_path()
quick_sort(m_path.begin(), m_path.end(), AK::is_less_than<String>);
}
void LineEditor::cut_mismatching_chars(String& completion, const String& program, int token_length)
void LineEditor::cut_mismatching_chars(String& completion, const String& program, size_t token_length)
{
int i = token_length;
size_t i = token_length;
while (i < completion.length() && i < program.length() && completion[i] == program[i])
++i;
completion = completion.substring(0, i);
@ -139,17 +139,17 @@ String LineEditor::get_line(const String& prompt)
}
auto do_delete = [&] {
if (m_cursor == m_buffer.size()) {
if (m_cursor == (size_t)m_buffer.size()) {
fputc('\a', stdout);
fflush(stdout);
return;
}
m_buffer.remove(m_cursor - 1);
m_buffer.remove((int)m_cursor - 1);
fputs("\033[3~", stdout);
fflush(stdout);
vt_save_cursor();
vt_clear_to_end_of_line();
for (int i = m_cursor; i < m_buffer.size(); ++i)
for (size_t i = m_cursor; i < (size_t)m_buffer.size(); ++i)
fputc(m_buffer[i], stdout);
vt_restore_cursor();
};
@ -195,7 +195,7 @@ String LineEditor::get_line(const String& prompt)
m_state = InputState::Free;
continue;
case 'C': // right
if (m_cursor < m_buffer.size()) {
if (m_cursor < (size_t)m_buffer.size()) {
++m_cursor;
fputs("\033[C", stdout);
fflush(stdout);
@ -204,17 +204,17 @@ String LineEditor::get_line(const String& prompt)
continue;
case 'H':
if (m_cursor > 0) {
fprintf(stdout, "\033[%dD", m_cursor);
fprintf(stdout, "\033[%zuD", m_cursor);
fflush(stdout);
m_cursor = 0;
}
m_state = InputState::Free;
continue;
case 'F':
if (m_cursor < m_buffer.size()) {
fprintf(stdout, "\033[%dC", m_buffer.size() - m_cursor);
if (m_cursor < (size_t)m_buffer.size()) {
fprintf(stdout, "\033[%zuC", (size_t)m_buffer.size() - m_cursor);
fflush(stdout);
m_cursor = m_buffer.size();
m_cursor = (size_t)m_buffer.size();
}
m_state = InputState::Free;
continue;
@ -264,13 +264,13 @@ String LineEditor::get_line(const String& prompt)
fflush(stdout);
return;
}
m_buffer.remove(m_cursor - 1);
m_buffer.remove((int)m_cursor - 1);
--m_cursor;
putchar(8);
vt_save_cursor();
vt_clear_to_end_of_line();
for (int i = m_cursor; i < m_buffer.size(); ++i)
fputc(m_buffer[i], stdout);
for (size_t i = m_cursor; i < (size_t)m_buffer.size(); ++i)
fputc(m_buffer[(int)i], stdout);
vt_restore_cursor();
};
@ -281,7 +281,7 @@ String LineEditor::get_line(const String& prompt)
if (ch == g.termios.c_cc[VWERASE]) {
bool has_seen_nonspace = false;
while (m_cursor > 0) {
if (isspace(m_buffer[m_cursor - 1])) {
if (isspace(m_buffer[(int)m_cursor - 1])) {
if (has_seen_nonspace)
break;
} else {
@ -301,14 +301,14 @@ String LineEditor::get_line(const String& prompt)
fputs(prompt.characters(), stdout);
for (int i = 0; i < m_buffer.size(); ++i)
fputc(m_buffer[i], stdout);
if (m_cursor < m_buffer.size())
printf("\033[%dD", m_buffer.size() - m_cursor); // Move cursor N steps left.
if (m_cursor < (size_t)m_buffer.size())
printf("\033[%zuD", (size_t)m_buffer.size() - m_cursor); // Move cursor N steps left.
fflush(stdout);
continue;
}
if (ch == 0x01) { // ^A
if (m_cursor > 0) {
printf("\033[%dD", m_cursor);
printf("\033[%zuD", m_cursor);
fflush(stdout);
m_cursor = 0;
}
@ -322,10 +322,10 @@ String LineEditor::get_line(const String& prompt)
continue;
}
if (ch == 0x05) { // ^E
if (m_cursor < m_buffer.size()) {
printf("\033[%dC", m_buffer.size() - m_cursor);
if (m_cursor < (size_t)m_buffer.size()) {
printf("\033[%zuC", (size_t)m_buffer.size() - m_cursor);
fflush(stdout);
m_cursor = m_buffer.size();
m_cursor = (size_t)m_buffer.size();
}
continue;
}
@ -337,17 +337,17 @@ String LineEditor::get_line(const String& prompt)
return string;
}
if (m_cursor == m_buffer.size()) {
if (m_cursor == (size_t)m_buffer.size()) {
m_buffer.append(ch);
++m_cursor;
continue;
}
vt_save_cursor();
vt_clear_to_end_of_line();
for (int i = m_cursor; i < m_buffer.size(); ++i)
fputc(m_buffer[i], stdout);
for (size_t i = m_cursor; i < (size_t)m_buffer.size(); ++i)
fputc(m_buffer[(int)i], stdout);
vt_restore_cursor();
m_buffer.insert(m_cursor, move(ch));
m_buffer.insert((int)m_cursor, move(ch));
++m_cursor;
}
}

View file

@ -23,14 +23,14 @@ public:
private:
void clear_line();
void append(const String&);
void cut_mismatching_chars(String& completion, const String& program, int token_length);
void cut_mismatching_chars(String& completion, const String& program, size_t token_length);
void tab_complete_first_token();
void vt_save_cursor();
void vt_restore_cursor();
void vt_clear_to_end_of_line();
Vector<char, 1024> m_buffer;
int m_cursor { 0 };
size_t m_cursor { 0 };
// FIXME: This should be something more take_first()-friendly.
Vector<String> m_history;

View file

@ -48,7 +48,7 @@ void Parser::begin_redirect_write(int fd)
Vector<Command> Parser::parse()
{
for (int i = 0; i < m_input.length(); ++i) {
for (size_t i = 0; i < m_input.length(); ++i) {
char ch = m_input.characters()[i];
switch (m_state) {
case State::Free:
@ -107,7 +107,7 @@ Vector<Command> Parser::parse()
// redirection from zsh-style multi-digit fd, such as {10}>file
if (ch == '{') {
bool is_multi_fd_redirection = false;
int redir_end = i + 1;
size_t redir_end = i + 1;
while (redir_end < m_input.length()) {
char lookahead_ch = m_input.characters()[redir_end];

View file

@ -457,7 +457,7 @@ struct CommandTimer {
static bool is_glob(const StringView& s)
{
for (int i = 0; i < s.length(); i++) {
for (size_t i = 0; i < s.length(); i++) {
char c = s.characters_without_null_termination()[i];
if (c == '*' || c == '?')
return true;
@ -469,19 +469,19 @@ static Vector<StringView> split_path(const StringView& path)
{
Vector<StringView> parts;
ssize_t substart = 0;
for (ssize_t i = 0; i < path.length(); i++) {
size_t substart = 0;
for (size_t i = 0; i < path.length(); i++) {
char ch = path.characters_without_null_termination()[i];
if (ch != '/')
continue;
ssize_t sublen = i - substart;
size_t sublen = i - substart;
if (sublen != 0)
parts.append(path.substring_view(substart, sublen));
parts.append(path.substring_view(i, 1));
substart = i + 1;
}
ssize_t taillen = path.length() - substart;
size_t taillen = path.length() - substart;
if (taillen != 0)
parts.append(path.substring_view(substart, taillen));