mirror of
https://github.com/fish-shell/fish-shell.git
synced 2025-03-15 23:22:53 +08:00
[clang-tidy] use auto when casting
Found with modernize-use-auto Signed-off-by: Rosen Penev <rosenp@gmail.com>
This commit is contained in:
parent
b42445e675
commit
220f0a132d
@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Checks: 'clang-diagnostic-*,clang-analyzer-*,cert-*,performance-*,portability-*'
|
Checks: 'clang-diagnostic-*,clang-analyzer-*,cert-*,performance-*,portability-*,modernize-use-auto'
|
||||||
WarningsAsErrors: ''
|
WarningsAsErrors: ''
|
||||||
HeaderFilterRegex: ''
|
HeaderFilterRegex: ''
|
||||||
AnalyzeTemporaryDtors: false
|
AnalyzeTemporaryDtors: false
|
||||||
@ -9,5 +9,7 @@ CheckOptions:
|
|||||||
value: 'L;LL;LU;LLU'
|
value: 'L;LL;LU;LLU'
|
||||||
- key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField
|
- key: cert-oop54-cpp.WarnOnlyIfThisHasSuspiciousField
|
||||||
value: '0'
|
value: '0'
|
||||||
|
- key: modernize-use-auto.RemoveStars
|
||||||
|
value: '1'
|
||||||
...
|
...
|
||||||
|
|
||||||
|
@ -488,7 +488,7 @@ void builtin_printf_state_t::print_direc(const wchar_t *start, size_t length, wc
|
|||||||
switch (conversion) {
|
switch (conversion) {
|
||||||
case L'd':
|
case L'd':
|
||||||
case L'i': {
|
case L'i': {
|
||||||
intmax_t arg = string_to_scalar_type<intmax_t>(argument, this);
|
auto arg = string_to_scalar_type<intmax_t>(argument, this);
|
||||||
if (!have_field_width) {
|
if (!have_field_width) {
|
||||||
if (!have_precision)
|
if (!have_precision)
|
||||||
this->append_format_output(fmt.c_str(), arg);
|
this->append_format_output(fmt.c_str(), arg);
|
||||||
@ -506,7 +506,7 @@ void builtin_printf_state_t::print_direc(const wchar_t *start, size_t length, wc
|
|||||||
case L'u':
|
case L'u':
|
||||||
case L'x':
|
case L'x':
|
||||||
case L'X': {
|
case L'X': {
|
||||||
uintmax_t arg = string_to_scalar_type<uintmax_t>(argument, this);
|
auto arg = string_to_scalar_type<uintmax_t>(argument, this);
|
||||||
if (!have_field_width) {
|
if (!have_field_width) {
|
||||||
if (!have_precision)
|
if (!have_precision)
|
||||||
this->append_format_output(fmt.c_str(), arg);
|
this->append_format_output(fmt.c_str(), arg);
|
||||||
@ -528,7 +528,7 @@ void builtin_printf_state_t::print_direc(const wchar_t *start, size_t length, wc
|
|||||||
case L'F':
|
case L'F':
|
||||||
case L'g':
|
case L'g':
|
||||||
case L'G': {
|
case L'G': {
|
||||||
long double arg = string_to_scalar_type<long double>(argument, this);
|
auto arg = string_to_scalar_type<long double>(argument, this);
|
||||||
if (!have_field_width) {
|
if (!have_field_width) {
|
||||||
if (!have_precision) {
|
if (!have_precision) {
|
||||||
this->append_format_output(fmt.c_str(), arg);
|
this->append_format_output(fmt.c_str(), arg);
|
||||||
@ -579,7 +579,7 @@ void builtin_printf_state_t::print_direc(const wchar_t *start, size_t length, wc
|
|||||||
static inline void modify_allowed_format_specifiers(bool ok[UCHAR_MAX + 1], const char *str,
|
static inline void modify_allowed_format_specifiers(bool ok[UCHAR_MAX + 1], const char *str,
|
||||||
bool flag) {
|
bool flag) {
|
||||||
for (const char *c = str; *c != '\0'; c++) {
|
for (const char *c = str; *c != '\0'; c++) {
|
||||||
unsigned char idx = static_cast<unsigned char>(*c);
|
auto idx = static_cast<unsigned char>(*c);
|
||||||
ok[idx] = flag;
|
ok[idx] = flag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -654,7 +654,7 @@ int builtin_printf_state_t::print_formatted(const wchar_t *format, int argc, wch
|
|||||||
++f;
|
++f;
|
||||||
++direc_length;
|
++direc_length;
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
intmax_t width = string_to_scalar_type<intmax_t>(*argv, this);
|
auto width = string_to_scalar_type<intmax_t>(*argv, this);
|
||||||
if (INT_MIN <= width && width <= INT_MAX)
|
if (INT_MIN <= width && width <= INT_MAX)
|
||||||
field_width = static_cast<int>(width);
|
field_width = static_cast<int>(width);
|
||||||
else
|
else
|
||||||
@ -679,7 +679,7 @@ int builtin_printf_state_t::print_formatted(const wchar_t *format, int argc, wch
|
|||||||
++f;
|
++f;
|
||||||
++direc_length;
|
++direc_length;
|
||||||
if (argc > 0) {
|
if (argc > 0) {
|
||||||
intmax_t prec = string_to_scalar_type<intmax_t>(*argv, this);
|
auto prec = string_to_scalar_type<intmax_t>(*argv, this);
|
||||||
if (prec < 0) {
|
if (prec < 0) {
|
||||||
// A negative precision is taken as if the precision were omitted,
|
// A negative precision is taken as if the precision were omitted,
|
||||||
// so -1 is safe here even if prec < INT_MIN.
|
// so -1 is safe here even if prec < INT_MIN.
|
||||||
|
@ -350,7 +350,7 @@ int builtin_status(parser_t &parser, io_streams_t &streams, wchar_t **argv) {
|
|||||||
streams.err.append_format(BUILTIN_ERR_ARG_COUNT2, cmd, subcmd_str, 1, args.size());
|
streams.err.append_format(BUILTIN_ERR_ARG_COUNT2, cmd, subcmd_str, 1, args.size());
|
||||||
return STATUS_INVALID_ARGS;
|
return STATUS_INVALID_ARGS;
|
||||||
}
|
}
|
||||||
const auto *metadata = features_t::metadata_for(args.front().c_str());
|
auto metadata = features_t::metadata_for(args.front().c_str());
|
||||||
if (!metadata) {
|
if (!metadata) {
|
||||||
retval = TEST_FEATURE_NOT_RECOGNIZED;
|
retval = TEST_FEATURE_NOT_RECOGNIZED;
|
||||||
} else {
|
} else {
|
||||||
|
@ -871,7 +871,7 @@ class pcre2_matcher_t : public string_matcher_t {
|
|||||||
if (opts.invert_match) return true;
|
if (opts.invert_match) return true;
|
||||||
|
|
||||||
// Report any additional matches.
|
// Report any additional matches.
|
||||||
for (auto *ovector = pcre2_get_ovector_pointer(regex.match); opts.all; total_matched++) {
|
for (auto ovector = pcre2_get_ovector_pointer(regex.match); opts.all; total_matched++) {
|
||||||
uint32_t options = 0;
|
uint32_t options = 0;
|
||||||
PCRE2_SIZE offset = ovector[1]; // start at end of previous match
|
PCRE2_SIZE offset = ovector[1]; // start at end of previous match
|
||||||
|
|
||||||
@ -1052,7 +1052,7 @@ bool regex_replacer_t::replace_matches(const wcstring &arg) {
|
|||||||
(opts.all ? PCRE2_SUBSTITUTE_GLOBAL : 0);
|
(opts.all ? PCRE2_SUBSTITUTE_GLOBAL : 0);
|
||||||
size_t arglen = arg.length();
|
size_t arglen = arg.length();
|
||||||
PCRE2_SIZE bufsize = (arglen == 0) ? 16 : 2 * arglen;
|
PCRE2_SIZE bufsize = (arglen == 0) ? 16 : 2 * arglen;
|
||||||
wchar_t *output = static_cast<wchar_t *>(malloc(sizeof(wchar_t) * bufsize));
|
auto output = static_cast<wchar_t *>(malloc(sizeof(wchar_t) * bufsize));
|
||||||
int pcre2_rc;
|
int pcre2_rc;
|
||||||
PCRE2_SIZE outlen = bufsize;
|
PCRE2_SIZE outlen = bufsize;
|
||||||
|
|
||||||
@ -1071,8 +1071,7 @@ bool regex_replacer_t::replace_matches(const wcstring &arg) {
|
|||||||
done = true;
|
done = true;
|
||||||
} else {
|
} else {
|
||||||
bufsize = outlen;
|
bufsize = outlen;
|
||||||
wchar_t *new_output =
|
auto new_output = static_cast<wchar_t *>(realloc(output, sizeof(wchar_t) * bufsize));
|
||||||
static_cast<wchar_t *>(realloc(output, sizeof(wchar_t) * bufsize));
|
|
||||||
if (new_output) output = new_output;
|
if (new_output) output = new_output;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1307,7 +1306,7 @@ static int string_sub(parser_t &parser, io_streams_t &streams, int argc, wchar_t
|
|||||||
pos = static_cast<size_type>(opts.start - 1);
|
pos = static_cast<size_type>(opts.start - 1);
|
||||||
} else if (opts.start < 0) {
|
} else if (opts.start < 0) {
|
||||||
assert(opts.start != LONG_MIN); // checked above
|
assert(opts.start != LONG_MIN); // checked above
|
||||||
size_type n = static_cast<size_type>(-opts.start);
|
auto n = static_cast<size_type>(-opts.start);
|
||||||
pos = n > s->length() ? 0 : s->length() - n;
|
pos = n > s->length() ? 0 : s->length() - n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -87,15 +87,15 @@ static int parse_hex_digit(wchar_t x) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long squared_difference(long p1, long p2) {
|
static unsigned long squared_difference(long p1, long p2) {
|
||||||
unsigned long diff = static_cast<unsigned long>(labs(p1 - p2));
|
auto diff = static_cast<unsigned long>(labs(p1 - p2));
|
||||||
return diff * diff;
|
return diff * diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned char convert_color(const unsigned char rgb[3], const uint32_t *colors,
|
static unsigned char convert_color(const unsigned char rgb[3], const uint32_t *colors,
|
||||||
size_t color_count) {
|
size_t color_count) {
|
||||||
long r = rgb[0], g = rgb[1], b = rgb[2];
|
long r = rgb[0], g = rgb[1], b = rgb[2];
|
||||||
unsigned long best_distance = static_cast<unsigned long>(-1);
|
auto best_distance = static_cast<unsigned long>(-1);
|
||||||
unsigned char best_index = static_cast<unsigned char>(-1);
|
auto best_index = static_cast<unsigned char>(-1);
|
||||||
for (size_t idx = 0; idx < color_count; idx++) {
|
for (size_t idx = 0; idx < color_count; idx++) {
|
||||||
uint32_t color = colors[idx];
|
uint32_t color = colors[idx];
|
||||||
long test_r = (color >> 16) & 0xFF, test_g = (color >> 8) & 0xFF,
|
long test_r = (color >> 16) & 0xFF, test_g = (color >> 8) & 0xFF,
|
||||||
|
@ -361,7 +361,7 @@ char *wcs2str(const wchar_t *in, size_t len) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Here we probably allocate a buffer probably much larger than necessary.
|
// Here we probably allocate a buffer probably much larger than necessary.
|
||||||
char *out = static_cast<char *>(malloc(MAX_UTF8_BYTES * len + 1));
|
auto out = static_cast<char *>(malloc(MAX_UTF8_BYTES * len + 1));
|
||||||
assert(out);
|
assert(out);
|
||||||
// Instead of returning the return value of wcs2str_internal, return `out` directly.
|
// Instead of returning the return value of wcs2str_internal, return `out` directly.
|
||||||
// This eliminates false warnings in coverity about resource leaks.
|
// This eliminates false warnings in coverity about resource leaks.
|
||||||
@ -1210,7 +1210,7 @@ wcstring debug_escape(const wcstring &in) {
|
|||||||
wcstring result;
|
wcstring result;
|
||||||
result.reserve(in.size());
|
result.reserve(in.size());
|
||||||
for (wchar_t wc : in) {
|
for (wchar_t wc : in) {
|
||||||
uint32_t c = static_cast<uint32_t>(wc);
|
auto c = static_cast<uint32_t>(wc);
|
||||||
if (c <= 127 && isprint(c)) {
|
if (c <= 127 && isprint(c)) {
|
||||||
result.push_back(wc);
|
result.push_back(wc);
|
||||||
continue;
|
continue;
|
||||||
@ -2148,7 +2148,7 @@ void assert_is_background_thread(const char *who) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void assert_is_locked(void *vmutex, const char *who, const char *caller) {
|
void assert_is_locked(void *vmutex, const char *who, const char *caller) {
|
||||||
std::mutex *mutex = static_cast<std::mutex *>(vmutex);
|
auto mutex = static_cast<std::mutex *>(vmutex);
|
||||||
|
|
||||||
// Note that std::mutex.try_lock() is allowed to return false when the mutex isn't
|
// Note that std::mutex.try_lock() is allowed to return false when the mutex isn't
|
||||||
// actually locked; fortunately we are checking the opposite so we're safe.
|
// actually locked; fortunately we are checking the opposite so we're safe.
|
||||||
|
@ -422,7 +422,7 @@ bool completer_t::condition_test(const wcstring &condition) {
|
|||||||
|
|
||||||
ASSERT_IS_MAIN_THREAD();
|
ASSERT_IS_MAIN_THREAD();
|
||||||
bool test_res;
|
bool test_res;
|
||||||
condition_cache_t::iterator cached_entry = condition_cache.find(condition);
|
auto cached_entry = condition_cache.find(condition);
|
||||||
if (cached_entry == condition_cache.end()) {
|
if (cached_entry == condition_cache.end()) {
|
||||||
// Compute new value and reinsert it.
|
// Compute new value and reinsert it.
|
||||||
test_res =
|
test_res =
|
||||||
@ -476,7 +476,7 @@ void complete_add(const wchar_t *cmd, bool cmd_is_path, const wcstring &option,
|
|||||||
/// option strings. Returns true if it is now empty and should be deleted, false if it's not empty.
|
/// option strings. Returns true if it is now empty and should be deleted, false if it's not empty.
|
||||||
/// Must be called while locked.
|
/// Must be called while locked.
|
||||||
bool completion_entry_t::remove_option(const wcstring &option, complete_option_type_t type) {
|
bool completion_entry_t::remove_option(const wcstring &option, complete_option_type_t type) {
|
||||||
option_list_t::iterator iter = this->options.begin();
|
auto iter = this->options.begin();
|
||||||
while (iter != this->options.end()) {
|
while (iter != this->options.end()) {
|
||||||
if (iter->option == option && iter->type == type) {
|
if (iter->option == option && iter->type == type) {
|
||||||
iter = this->options.erase(iter);
|
iter = this->options.erase(iter);
|
||||||
@ -493,10 +493,10 @@ void complete_remove(const wcstring &cmd, bool cmd_is_path, const wcstring &opti
|
|||||||
auto completion_set = s_completion_set.acquire();
|
auto completion_set = s_completion_set.acquire();
|
||||||
|
|
||||||
completion_entry_t tmp_entry(cmd, cmd_is_path);
|
completion_entry_t tmp_entry(cmd, cmd_is_path);
|
||||||
completion_entry_set_t::iterator iter = completion_set->find(tmp_entry);
|
auto iter = completion_set->find(tmp_entry);
|
||||||
if (iter != completion_set->end()) {
|
if (iter != completion_set->end()) {
|
||||||
// const_cast: See SET_ELEMENTS_ARE_IMMUTABLE.
|
// const_cast: See SET_ELEMENTS_ARE_IMMUTABLE.
|
||||||
completion_entry_t &entry = const_cast<completion_entry_t &>(*iter);
|
auto &entry = const_cast<completion_entry_t &>(*iter);
|
||||||
|
|
||||||
bool delete_it = entry.remove_option(option, type);
|
bool delete_it = entry.remove_option(option, type);
|
||||||
if (delete_it) {
|
if (delete_it) {
|
||||||
@ -1788,7 +1788,7 @@ bool complete_remove_wrapper(const wcstring &command, const wcstring &target_to_
|
|||||||
auto locked_map = wrapper_map.acquire();
|
auto locked_map = wrapper_map.acquire();
|
||||||
wrapper_map_t &wraps = *locked_map;
|
wrapper_map_t &wraps = *locked_map;
|
||||||
bool result = false;
|
bool result = false;
|
||||||
wrapper_map_t::iterator current_targets_iter = wraps.find(command);
|
auto current_targets_iter = wraps.find(command);
|
||||||
if (current_targets_iter != wraps.end()) {
|
if (current_targets_iter != wraps.end()) {
|
||||||
wcstring_list_t *targets = ¤t_targets_iter->second;
|
wcstring_list_t *targets = ¤t_targets_iter->second;
|
||||||
auto where = std::find(targets->begin(), targets->end(), target_to_remove);
|
auto where = std::find(targets->begin(), targets->end(), target_to_remove);
|
||||||
|
@ -107,7 +107,7 @@ const electric_var_t *electric_var_t::for_name(const wcstring &name) {
|
|||||||
|
|
||||||
/// Check if a variable may not be set using the set command.
|
/// Check if a variable may not be set using the set command.
|
||||||
static bool is_read_only(const wcstring &key) {
|
static bool is_read_only(const wcstring &key) {
|
||||||
if (const auto *ev = electric_var_t::for_name(key)) {
|
if (auto ev = electric_var_t::for_name(key)) {
|
||||||
return ev->readonly();
|
return ev->readonly();
|
||||||
}
|
}
|
||||||
// Hack.
|
// Hack.
|
||||||
|
@ -253,13 +253,13 @@ env_universal_t::env_universal_t(wcstring path)
|
|||||||
: narrow_vars_path(wcs2string(path)), explicit_vars_path(std::move(path)) {}
|
: narrow_vars_path(wcs2string(path)), explicit_vars_path(std::move(path)) {}
|
||||||
|
|
||||||
maybe_t<env_var_t> env_universal_t::get(const wcstring &name) const {
|
maybe_t<env_var_t> env_universal_t::get(const wcstring &name) const {
|
||||||
var_table_t::const_iterator where = vars.find(name);
|
auto where = vars.find(name);
|
||||||
if (where != vars.end()) return where->second;
|
if (where != vars.end()) return where->second;
|
||||||
return none();
|
return none();
|
||||||
}
|
}
|
||||||
|
|
||||||
maybe_t<env_var_t::env_var_flags_t> env_universal_t::get_flags(const wcstring &name) const {
|
maybe_t<env_var_t::env_var_flags_t> env_universal_t::get_flags(const wcstring &name) const {
|
||||||
var_table_t::const_iterator where = vars.find(name);
|
auto where = vars.find(name);
|
||||||
if (where != vars.end()) {
|
if (where != vars.end()) {
|
||||||
return where->second.get_flags();
|
return where->second.get_flags();
|
||||||
}
|
}
|
||||||
@ -360,7 +360,7 @@ void env_universal_t::generate_callbacks_and_update_exports(const var_table_t &n
|
|||||||
void env_universal_t::acquire_variables(var_table_t &vars_to_acquire) {
|
void env_universal_t::acquire_variables(var_table_t &vars_to_acquire) {
|
||||||
// Copy modified values from existing vars to vars_to_acquire.
|
// Copy modified values from existing vars to vars_to_acquire.
|
||||||
for (const auto &key : this->modified) {
|
for (const auto &key : this->modified) {
|
||||||
var_table_t::iterator src_iter = this->vars.find(key);
|
auto src_iter = this->vars.find(key);
|
||||||
if (src_iter == this->vars.end()) {
|
if (src_iter == this->vars.end()) {
|
||||||
/* The value has been deleted. */
|
/* The value has been deleted. */
|
||||||
vars_to_acquire.erase(key);
|
vars_to_acquire.erase(key);
|
||||||
|
@ -93,8 +93,8 @@ static void safe_launch_process(process_t *p, const char *actual_cmd, const char
|
|||||||
int err;
|
int err;
|
||||||
|
|
||||||
// This function never returns, so we take certain liberties with constness.
|
// This function never returns, so we take certain liberties with constness.
|
||||||
char *const *envv = const_cast<char *const *>(cenvv);
|
const auto envv = const_cast<char *const *>(cenvv);
|
||||||
char *const *argv = const_cast<char *const *>(cargv);
|
const auto argv = const_cast<char *const *>(cargv);
|
||||||
|
|
||||||
execve(actual_cmd, argv, envv);
|
execve(actual_cmd, argv, envv);
|
||||||
err = errno;
|
err = errno;
|
||||||
@ -1062,8 +1062,7 @@ static void populate_subshell_output(wcstring_list_t *lst, const io_buffer_t &bu
|
|||||||
const char *cursor = begin;
|
const char *cursor = begin;
|
||||||
while (cursor < end) {
|
while (cursor < end) {
|
||||||
// Look for the next separator.
|
// Look for the next separator.
|
||||||
const char *stop =
|
auto stop = static_cast<const char *>(std::memchr(cursor, '\n', end - cursor));
|
||||||
static_cast<const char *>(std::memchr(cursor, '\n', end - cursor));
|
|
||||||
const bool hit_separator = (stop != nullptr);
|
const bool hit_separator = (stop != nullptr);
|
||||||
if (!hit_separator) {
|
if (!hit_separator) {
|
||||||
// If it's not found, just use the end.
|
// If it's not found, just use the end.
|
||||||
|
@ -77,7 +77,7 @@ int fish_mkstemp_cloexec(char *name_template) {
|
|||||||
// cppcheck-suppress unusedFunction
|
// cppcheck-suppress unusedFunction
|
||||||
[[gnu::unused]] static wchar_t *wcsdup_fallback(const wchar_t *in) {
|
[[gnu::unused]] static wchar_t *wcsdup_fallback(const wchar_t *in) {
|
||||||
size_t len = std::wcslen(in);
|
size_t len = std::wcslen(in);
|
||||||
wchar_t *out = static_cast<wchar_t *>(malloc(sizeof(wchar_t) * (len + 1)));
|
auto out = static_cast<wchar_t *>(malloc(sizeof(wchar_t) * (len + 1)));
|
||||||
if (out == nullptr) {
|
if (out == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@ -162,7 +162,7 @@ int wcsncasecmp(const wchar_t *a, const wchar_t *b, size_t n) {
|
|||||||
|
|
||||||
#ifndef HAVE_WCSNDUP
|
#ifndef HAVE_WCSNDUP
|
||||||
wchar_t *wcsndup(const wchar_t *in, size_t c) {
|
wchar_t *wcsndup(const wchar_t *in, size_t c) {
|
||||||
wchar_t *res = static_cast<wchar_t *>(malloc(sizeof(wchar_t) * (c + 1)));
|
auto res = static_cast<wchar_t *>(malloc(sizeof(wchar_t) * (c + 1)));
|
||||||
if (res == nullptr) {
|
if (res == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -336,12 +336,12 @@ static int fish_parse_opt(int argc, char **argv, fish_cmd_opts_t *opts) {
|
|||||||
auto cats = get_flog_categories();
|
auto cats = get_flog_categories();
|
||||||
// Compute width of longest name.
|
// Compute width of longest name.
|
||||||
int name_width = 0;
|
int name_width = 0;
|
||||||
for (const auto *cat : cats) {
|
for (auto cat : cats) {
|
||||||
name_width = std::max(name_width, static_cast<int>(wcslen(cat->name)));
|
name_width = std::max(name_width, static_cast<int>(wcslen(cat->name)));
|
||||||
}
|
}
|
||||||
// A little extra space.
|
// A little extra space.
|
||||||
name_width += 2;
|
name_width += 2;
|
||||||
for (const auto *cat : cats) {
|
for (auto cat : cats) {
|
||||||
// Negating the name width left-justifies.
|
// Negating the name width left-justifies.
|
||||||
printf("%*ls %ls\n", -name_width, cat->name, _(cat->description));
|
printf("%*ls %ls\n", -name_width, cat->name, _(cat->description));
|
||||||
}
|
}
|
||||||
|
@ -810,8 +810,8 @@ static void test_fd_monitor() {
|
|||||||
item_oneshot.always_exit = true;
|
item_oneshot.always_exit = true;
|
||||||
{
|
{
|
||||||
fd_monitor_t monitor;
|
fd_monitor_t monitor;
|
||||||
for (auto *item : {&item_never, &item_hugetimeout, &item0_timeout, &item42_timeout,
|
for (auto item : {&item_never, &item_hugetimeout, &item0_timeout, &item42_timeout,
|
||||||
&item42_nottimeout, &item42_thenclose, &item_oneshot}) {
|
&item42_nottimeout, &item42_thenclose, &item_oneshot}) {
|
||||||
monitor.add(std::move(item->item));
|
monitor.add(std::move(item->item));
|
||||||
}
|
}
|
||||||
item42_timeout.write42();
|
item42_timeout.write42();
|
||||||
|
@ -80,7 +80,7 @@ static owning_lock<function_set_t> function_set;
|
|||||||
bool function_set_t::allow_autoload(const wcstring &name) const {
|
bool function_set_t::allow_autoload(const wcstring &name) const {
|
||||||
// Prohibit autoloading if we have a non-autoload (explicit) function, or if the function is
|
// Prohibit autoloading if we have a non-autoload (explicit) function, or if the function is
|
||||||
// tombstoned.
|
// tombstoned.
|
||||||
const auto *info = get_info(name);
|
auto info = get_info(name);
|
||||||
bool has_explicit_func = info && !info->is_autoload;
|
bool has_explicit_func = info && !info->is_autoload;
|
||||||
bool is_tombstoned = autoload_tombstones.count(name) > 0;
|
bool is_tombstoned = autoload_tombstones.count(name) > 0;
|
||||||
return !has_explicit_func && !is_tombstoned;
|
return !has_explicit_func && !is_tombstoned;
|
||||||
@ -175,7 +175,7 @@ void function_add(wcstring name, wcstring description, function_properties_ref_t
|
|||||||
std::shared_ptr<const function_properties_t> function_get_properties(const wcstring &name) {
|
std::shared_ptr<const function_properties_t> function_get_properties(const wcstring &name) {
|
||||||
if (parser_keywords_is_reserved(name)) return nullptr;
|
if (parser_keywords_is_reserved(name)) return nullptr;
|
||||||
auto funcset = function_set.acquire();
|
auto funcset = function_set.acquire();
|
||||||
if (const auto *info = funcset->get_info(name)) {
|
if (auto info = funcset->get_info(name)) {
|
||||||
return info->props;
|
return info->props;
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -466,8 +466,7 @@ void history_impl_t::set_valid_file_paths(const wcstring_list_t &valid_file_path
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Look for an item with the given identifier. It is likely to be at the end of new_items.
|
// Look for an item with the given identifier. It is likely to be at the end of new_items.
|
||||||
for (history_item_list_t::reverse_iterator iter = new_items.rbegin(); iter != new_items.rend();
|
for (auto iter = new_items.rbegin(); iter != new_items.rend(); ++iter) {
|
||||||
++iter) {
|
|
||||||
if (iter->identifier == ident) { // found it
|
if (iter->identifier == ident) { // found it
|
||||||
iter->required_paths = valid_file_paths;
|
iter->required_paths = valid_file_paths;
|
||||||
break;
|
break;
|
||||||
@ -603,7 +602,7 @@ void history_impl_t::load_old_if_needed() {
|
|||||||
|
|
||||||
bool history_search_t::go_backwards() {
|
bool history_search_t::go_backwards() {
|
||||||
// Backwards means increasing our index.
|
// Backwards means increasing our index.
|
||||||
const size_t max_index = static_cast<size_t>(-1);
|
const auto max_index = static_cast<size_t>(-1);
|
||||||
|
|
||||||
if (current_index_ == max_index) return false;
|
if (current_index_ == max_index) return false;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ static bool should_mmap(int fd) {
|
|||||||
// Return true on success, false on failure.
|
// Return true on success, false on failure.
|
||||||
static bool read_from_fd(int fd, void *address, size_t len) {
|
static bool read_from_fd(int fd, void *address, size_t len) {
|
||||||
size_t remaining = len;
|
size_t remaining = len;
|
||||||
char *ptr = static_cast<char *>(address);
|
auto ptr = static_cast<char *>(address);
|
||||||
while (remaining > 0) {
|
while (remaining > 0) {
|
||||||
ssize_t amt = read(fd, ptr, remaining);
|
ssize_t amt = read(fd, ptr, remaining);
|
||||||
if (amt < 0) {
|
if (amt < 0) {
|
||||||
@ -162,7 +162,7 @@ history_item_t history_file_contents_t::decode_item(size_t offset) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
maybe_t<size_t> history_file_contents_t::offset_of_next_item(size_t *cursor, time_t cutoff) {
|
maybe_t<size_t> history_file_contents_t::offset_of_next_item(size_t *cursor, time_t cutoff) {
|
||||||
size_t offset = size_t(-1);
|
auto offset = size_t(-1);
|
||||||
switch (this->type()) {
|
switch (this->type()) {
|
||||||
case history_type_fish_2_0:
|
case history_type_fish_2_0:
|
||||||
offset = offset_of_next_item_fish_2_0(*this, cursor, cutoff);
|
offset = offset_of_next_item_fish_2_0(*this, cursor, cutoff);
|
||||||
@ -183,7 +183,7 @@ static size_t read_line(const char *base, size_t cursor, size_t len, std::string
|
|||||||
// Locate the newline.
|
// Locate the newline.
|
||||||
assert(cursor <= len);
|
assert(cursor <= len);
|
||||||
const char *start = base + cursor;
|
const char *start = base + cursor;
|
||||||
const char *a_newline = static_cast<const char *>(std::memchr(start, '\n', len - cursor));
|
auto a_newline = static_cast<const char *>(std::memchr(start, '\n', len - cursor));
|
||||||
if (a_newline != nullptr) { // we found a newline
|
if (a_newline != nullptr) { // we found a newline
|
||||||
result.assign(start, a_newline - start);
|
result.assign(start, a_newline - start);
|
||||||
// Return the amount to advance the cursor; skip over the newline.
|
// Return the amount to advance the cursor; skip over the newline.
|
||||||
@ -342,7 +342,7 @@ static const char *next_line(const char *start, const char *end) {
|
|||||||
static size_t offset_of_next_item_fish_2_0(const history_file_contents_t &contents,
|
static size_t offset_of_next_item_fish_2_0(const history_file_contents_t &contents,
|
||||||
size_t *inout_cursor, time_t cutoff_timestamp) {
|
size_t *inout_cursor, time_t cutoff_timestamp) {
|
||||||
size_t cursor = *inout_cursor;
|
size_t cursor = *inout_cursor;
|
||||||
size_t result = size_t(-1);
|
auto result = size_t(-1);
|
||||||
const size_t length = contents.length();
|
const size_t length = contents.length();
|
||||||
const char *const begin = contents.begin();
|
const char *const begin = contents.begin();
|
||||||
const char *const end = contents.end();
|
const char *const end = contents.end();
|
||||||
@ -350,8 +350,7 @@ static size_t offset_of_next_item_fish_2_0(const history_file_contents_t &conten
|
|||||||
const char *line_start = contents.address_at(cursor);
|
const char *line_start = contents.address_at(cursor);
|
||||||
|
|
||||||
// Advance the cursor to the next line.
|
// Advance the cursor to the next line.
|
||||||
const char *a_newline =
|
auto a_newline = static_cast<const char *>(std::memchr(line_start, '\n', length - cursor));
|
||||||
static_cast<const char *>(std::memchr(line_start, '\n', length - cursor));
|
|
||||||
if (a_newline == nullptr) break;
|
if (a_newline == nullptr) break;
|
||||||
|
|
||||||
// Advance the cursor past this line. +1 is for the newline.
|
// Advance the cursor past this line. +1 is for the newline.
|
||||||
@ -509,7 +508,7 @@ static history_item_t decode_item_fish_1_x(const char *begin, size_t length) {
|
|||||||
while (*time_string && !iswdigit(*time_string)) time_string++;
|
while (*time_string && !iswdigit(*time_string)) time_string++;
|
||||||
|
|
||||||
if (*time_string) {
|
if (*time_string) {
|
||||||
time_t tm = static_cast<time_t>(fish_wcstol(time_string));
|
auto tm = static_cast<time_t>(fish_wcstol(time_string));
|
||||||
if (!errno && tm >= 0) {
|
if (!errno && tm >= 0) {
|
||||||
timestamp = tm;
|
timestamp = tm;
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
/// Provide the fd monitor used for background fillthread operations.
|
/// Provide the fd monitor used for background fillthread operations.
|
||||||
static fd_monitor_t &fd_monitor() {
|
static fd_monitor_t &fd_monitor() {
|
||||||
// Deliberately leaked to avoid shutdown dtors.
|
// Deliberately leaked to avoid shutdown dtors.
|
||||||
static fd_monitor_t *fdm = new fd_monitor_t();
|
static auto fdm = new fd_monitor_t();
|
||||||
return *fdm;
|
return *fdm;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ io_buffer_t::~io_buffer_t() {
|
|||||||
|
|
||||||
void io_chain_t::remove(const shared_ptr<const io_data_t> &element) {
|
void io_chain_t::remove(const shared_ptr<const io_data_t> &element) {
|
||||||
// See if you can guess why std::find doesn't work here.
|
// See if you can guess why std::find doesn't work here.
|
||||||
for (io_chain_t::iterator iter = this->begin(); iter != this->end(); ++iter) {
|
for (auto iter = this->begin(); iter != this->end(); ++iter) {
|
||||||
if (*iter == element) {
|
if (*iter == element) {
|
||||||
this->erase(iter);
|
this->erase(iter);
|
||||||
break;
|
break;
|
||||||
|
@ -466,7 +466,7 @@ using void_func_t = std::function<void(void)>;
|
|||||||
static void *func_invoker(void *param) {
|
static void *func_invoker(void *param) {
|
||||||
// Acquire a thread id for this thread.
|
// Acquire a thread id for this thread.
|
||||||
(void)thread_id();
|
(void)thread_id();
|
||||||
void_func_t *vf = static_cast<void_func_t *>(param);
|
auto vf = static_cast<void_func_t *>(param);
|
||||||
(*vf)();
|
(*vf)();
|
||||||
delete vf;
|
delete vf;
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@ -474,7 +474,7 @@ static void *func_invoker(void *param) {
|
|||||||
|
|
||||||
bool make_detached_pthread(void_func_t &&func) {
|
bool make_detached_pthread(void_func_t &&func) {
|
||||||
// Copy the function into a heap allocation.
|
// Copy the function into a heap allocation.
|
||||||
void_func_t *vf = new void_func_t(std::move(func));
|
auto vf = new void_func_t(std::move(func));
|
||||||
if (make_detached_pthread(func_invoker, vf)) {
|
if (make_detached_pthread(func_invoker, vf)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -22,13 +22,13 @@ static CharT **make_null_terminated_array_helper(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Now allocate their sum.
|
// Now allocate their sum.
|
||||||
unsigned char *base =
|
auto base =
|
||||||
static_cast<unsigned char *>(malloc(pointers_allocation_len + strings_allocation_len));
|
static_cast<unsigned char *>(malloc(pointers_allocation_len + strings_allocation_len));
|
||||||
if (!base) return nullptr;
|
if (!base) return nullptr;
|
||||||
|
|
||||||
// Divvy it up into the pointers and strings.
|
// Divvy it up into the pointers and strings.
|
||||||
CharT **pointers = reinterpret_cast<CharT **>(base);
|
auto pointers = reinterpret_cast<CharT **>(base);
|
||||||
CharT *strings = reinterpret_cast<CharT *>(base + pointers_allocation_len);
|
auto strings = reinterpret_cast<CharT *>(base + pointers_allocation_len);
|
||||||
|
|
||||||
// Start copying.
|
// Start copying.
|
||||||
for (size_t i = 0; i < count; i++) {
|
for (size_t i = 0; i < count; i++) {
|
||||||
|
@ -64,7 +64,7 @@ class null_terminated_array_t {
|
|||||||
/// Convert from a null terminated list to a vector of strings.
|
/// Convert from a null terminated list to a vector of strings.
|
||||||
static string_list_t to_list(const CharT *const *arr) {
|
static string_list_t to_list(const CharT *const *arr) {
|
||||||
string_list_t result;
|
string_list_t result;
|
||||||
for (const auto *cursor = arr; cursor && *cursor; cursor++) {
|
for (auto cursor = arr; cursor && *cursor; cursor++) {
|
||||||
result.push_back(*cursor);
|
result.push_back(*cursor);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -84,7 +84,7 @@ static size_t print_max(const wcstring &str, highlight_spec_t color, size_t max,
|
|||||||
// skip non-printable characters
|
// skip non-printable characters
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
size_t width_c = size_t(iwidth_c);
|
auto width_c = size_t(iwidth_c);
|
||||||
|
|
||||||
if (width_c > remaining) break;
|
if (width_c > remaining) break;
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ line_t pager_t::completion_print_item(const wcstring &prefix, const comp_t *c, s
|
|||||||
|
|
||||||
auto modify_role = [=](highlight_role_t role) -> highlight_role_t {
|
auto modify_role = [=](highlight_role_t role) -> highlight_role_t {
|
||||||
using uint_t = typename std::underlying_type<highlight_role_t>::type;
|
using uint_t = typename std::underlying_type<highlight_role_t>::type;
|
||||||
uint_t base = static_cast<uint_t>(role);
|
auto base = static_cast<uint_t>(role);
|
||||||
if (selected) {
|
if (selected) {
|
||||||
base += static_cast<uint_t>(highlight_role_t::pager_selected_background) -
|
base += static_cast<uint_t>(highlight_role_t::pager_selected_background) -
|
||||||
static_cast<uint_t>(highlight_role_t::pager_background);
|
static_cast<uint_t>(highlight_role_t::pager_background);
|
||||||
|
@ -453,7 +453,7 @@ class parse_ll_t {
|
|||||||
// it's lowest on the stack)
|
// it's lowest on the stack)
|
||||||
const size_t child_start_big = nodes.size();
|
const size_t child_start_big = nodes.size();
|
||||||
assert(child_start_big < NODE_OFFSET_INVALID);
|
assert(child_start_big < NODE_OFFSET_INVALID);
|
||||||
node_offset_t child_start = static_cast<node_offset_t>(child_start_big);
|
auto child_start = static_cast<node_offset_t>(child_start_big);
|
||||||
|
|
||||||
// To avoid constructing multiple nodes, we make a single one that we modify.
|
// To avoid constructing multiple nodes, we make a single one that we modify.
|
||||||
parse_node_t representative_child(token_type_invalid);
|
parse_node_t representative_child(token_type_invalid);
|
||||||
@ -728,7 +728,7 @@ void parse_ll_t::parse_error_unexpected_token(const wchar_t *expected, parse_tok
|
|||||||
|
|
||||||
void parse_ll_t::reset_symbols(enum parse_token_type_t goal) {
|
void parse_ll_t::reset_symbols(enum parse_token_type_t goal) {
|
||||||
// Add a new goal node, and then reset our symbol list to point at it.
|
// Add a new goal node, and then reset our symbol list to point at it.
|
||||||
node_offset_t where = static_cast<node_offset_t>(nodes.size());
|
auto where = static_cast<node_offset_t>(nodes.size());
|
||||||
nodes.push_back(parse_node_t(goal));
|
nodes.push_back(parse_node_t(goal));
|
||||||
|
|
||||||
symbol_stack.clear();
|
symbol_stack.clear();
|
||||||
|
@ -96,7 +96,7 @@ void proc_init() { signal_set_handlers_once(false); }
|
|||||||
|
|
||||||
// Basic thread safe sorted vector of job IDs in use.
|
// Basic thread safe sorted vector of job IDs in use.
|
||||||
// This is deliberately leaked to avoid dtor ordering issues - see #6539.
|
// This is deliberately leaked to avoid dtor ordering issues - see #6539.
|
||||||
static auto *const locked_consumed_job_ids = new owning_lock<std::vector<job_id_t>>();
|
static const auto locked_consumed_job_ids = new owning_lock<std::vector<job_id_t>>();
|
||||||
|
|
||||||
job_id_t acquire_job_id() {
|
job_id_t acquire_job_id() {
|
||||||
auto consumed_job_ids = locked_consumed_job_ids->acquire();
|
auto consumed_job_ids = locked_consumed_job_ids->acquire();
|
||||||
|
@ -148,13 +148,13 @@ operation_context_t get_bg_context(const std::shared_ptr<environment_t> &env,
|
|||||||
/// These are deliberately leaked to avoid shutdown dtor registration.
|
/// These are deliberately leaked to avoid shutdown dtor registration.
|
||||||
static debounce_t &debounce_autosuggestions() {
|
static debounce_t &debounce_autosuggestions() {
|
||||||
const long kAutosuggetTimeoutMs = 500;
|
const long kAutosuggetTimeoutMs = 500;
|
||||||
static debounce_t *res = new debounce_t(kAutosuggetTimeoutMs);
|
static auto res = new debounce_t(kAutosuggetTimeoutMs);
|
||||||
return *res;
|
return *res;
|
||||||
}
|
}
|
||||||
|
|
||||||
static debounce_t &debounce_highlighting() {
|
static debounce_t &debounce_highlighting() {
|
||||||
const long kHighlightTimeoutMs = 500;
|
const long kHighlightTimeoutMs = 500;
|
||||||
static debounce_t *res = new debounce_t(kHighlightTimeoutMs);
|
static auto res = new debounce_t(kHighlightTimeoutMs);
|
||||||
return *res;
|
return *res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -549,7 +549,7 @@ class reader_data_t : public std::enable_shared_from_this<reader_data_t> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
editable_line_t *active_edit_line() {
|
editable_line_t *active_edit_line() {
|
||||||
const auto *cthis = this;
|
auto cthis = reinterpret_cast<const reader_data_t *>(this);
|
||||||
return const_cast<editable_line_t *>(cthis->active_edit_line());
|
return const_cast<editable_line_t *>(cthis->active_edit_line());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ static te_expr *new_expr(const int type, const te_expr *parameters[]) {
|
|||||||
const int arity = get_arity(type);
|
const int arity = get_arity(type);
|
||||||
const int psize = sizeof(te_expr *) * arity;
|
const int psize = sizeof(te_expr *) * arity;
|
||||||
const int size = sizeof(te_expr) + psize;
|
const int size = sizeof(te_expr) + psize;
|
||||||
te_expr *ret = static_cast<te_expr *>(malloc(size));
|
auto ret = static_cast<te_expr *>(malloc(size));
|
||||||
// This sets float to 0, which depends on the implementation.
|
// This sets float to 0, which depends on the implementation.
|
||||||
// We rely on IEEE-754 floats anyway, so it's okay.
|
// We rely on IEEE-754 floats anyway, so it's okay.
|
||||||
std::memset(ret, 0, size);
|
std::memset(ret, 0, size);
|
||||||
@ -142,7 +142,7 @@ static constexpr double e() { return M_E; }
|
|||||||
static double fac(double a) { /* simplest version of fac */
|
static double fac(double a) { /* simplest version of fac */
|
||||||
if (a < 0.0) return NAN;
|
if (a < 0.0) return NAN;
|
||||||
if (a > UINT_MAX) return INFINITY;
|
if (a > UINT_MAX) return INFINITY;
|
||||||
unsigned int ua = static_cast<unsigned int>(a);
|
auto ua = static_cast<unsigned int>(a);
|
||||||
unsigned long int result = 1, i;
|
unsigned long int result = 1, i;
|
||||||
for (i = 1; i <= ua; i++) {
|
for (i = 1; i <= ua; i++) {
|
||||||
if (i > ULONG_MAX / result) return INFINITY;
|
if (i > ULONG_MAX / result) return INFINITY;
|
||||||
@ -448,7 +448,7 @@ static te_expr *factor(state *s) {
|
|||||||
|
|
||||||
while (s->type == TOK_INFIX &&
|
while (s->type == TOK_INFIX &&
|
||||||
(s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(pow)))) {
|
(s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(pow)))) {
|
||||||
te_fun2 t = (te_fun2)s->function;
|
auto t = (te_fun2)s->function;
|
||||||
next_token(s);
|
next_token(s);
|
||||||
|
|
||||||
if (insertion) {
|
if (insertion) {
|
||||||
@ -475,7 +475,7 @@ static te_expr *term(state *s) {
|
|||||||
(s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(mul)) ||
|
(s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(mul)) ||
|
||||||
s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(divide)) ||
|
s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(divide)) ||
|
||||||
s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(fmod)))) {
|
s->function == reinterpret_cast<const void *>(static_cast<te_fun2>(fmod)))) {
|
||||||
te_fun2 t = (te_fun2)s->function;
|
auto t = (te_fun2)s->function;
|
||||||
next_token(s);
|
next_token(s);
|
||||||
ret = NEW_EXPR(TE_FUNCTION2, ret, factor(s));
|
ret = NEW_EXPR(TE_FUNCTION2, ret, factor(s));
|
||||||
ret->function = reinterpret_cast<const void *>(t);
|
ret->function = reinterpret_cast<const void *>(t);
|
||||||
@ -489,7 +489,7 @@ static te_expr *expr(state *s) {
|
|||||||
te_expr *ret = term(s);
|
te_expr *ret = term(s);
|
||||||
|
|
||||||
while (s->type == TOK_INFIX && (s->function == add || s->function == sub)) {
|
while (s->type == TOK_INFIX && (s->function == add || s->function == sub)) {
|
||||||
te_fun2 t = (te_fun2)s->function;
|
auto t = (te_fun2)s->function;
|
||||||
next_token(s);
|
next_token(s);
|
||||||
ret = NEW_EXPR(TE_FUNCTION2, ret, term(s));
|
ret = NEW_EXPR(TE_FUNCTION2, ret, term(s));
|
||||||
ret->function = reinterpret_cast<const void *>(t);
|
ret->function = reinterpret_cast<const void *>(t);
|
||||||
|
@ -67,7 +67,7 @@ bool wchar_to_utf8_string(const std::wstring &str, std::string *result) {
|
|||||||
const wchar_t *input = str.c_str();
|
const wchar_t *input = str.c_str();
|
||||||
size_t outlen = wchar_to_utf8(input, inlen, nullptr, 0, 0);
|
size_t outlen = wchar_to_utf8(input, inlen, nullptr, 0, 0);
|
||||||
if (outlen > 0) {
|
if (outlen > 0) {
|
||||||
char *tmp = new char[outlen];
|
auto tmp = new char[outlen];
|
||||||
size_t outlen2 = wchar_to_utf8(input, inlen, tmp, outlen, 0);
|
size_t outlen2 = wchar_to_utf8(input, inlen, tmp, outlen, 0);
|
||||||
if (outlen2 > 0) {
|
if (outlen2 > 0) {
|
||||||
result->assign(tmp, outlen2);
|
result->assign(tmp, outlen2);
|
||||||
@ -110,7 +110,7 @@ size_t wchar_to_utf8(const wchar_t *in, size_t insize, char *out, size_t outsize
|
|||||||
} else {
|
} else {
|
||||||
// Allocate a temporary buffer to hold the input the std::copy performs the size conversion.
|
// Allocate a temporary buffer to hold the input the std::copy performs the size conversion.
|
||||||
// Note: insize may be 0.
|
// Note: insize may be 0.
|
||||||
utf8_wchar_t *tmp_input = new utf8_wchar_t[insize];
|
auto tmp_input = new utf8_wchar_t[insize];
|
||||||
if (!safe_copy_wchar_to_utf8_wchar(in, tmp_input, insize)) {
|
if (!safe_copy_wchar_to_utf8_wchar(in, tmp_input, insize)) {
|
||||||
// Our utf8_wchar_t is UCS-16 and there was an astral character.
|
// Our utf8_wchar_t is UCS-16 and there was an astral character.
|
||||||
result = 0;
|
result = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user