Make tok_first return a wcstring instead of a wchar_t*

This commit is contained in:
ridiculousfish 2012-11-21 22:23:48 -08:00
parent 7117c4a5ee
commit 6fc9e6f21e
4 changed files with 25 additions and 26 deletions

View file

@ -3254,10 +3254,9 @@ static int builtin_fg(parser_t &parser, wchar_t **argv)
j->command_wcstr());
}
wchar_t *ft = tok_first(j->command_wcstr());
if (ft != 0)
env_set(L"_", ft, ENV_EXPORT);
free(ft);
const wcstring ft = tok_first(j->command_wcstr());
if (! ft.empty())
env_set(L"_", ft.c_str(), ENV_EXPORT);
reader_write_title();
make_first(j);

View file

@ -2200,14 +2200,12 @@ void set_env_cmd_duration(struct timeval *after, struct timeval *before)
void reader_run_command(parser_t &parser, const wchar_t *cmd)
{
wchar_t *ft;
struct timeval time_before, time_after;
ft= tok_first(cmd);
wcstring ft = tok_first(cmd);
if (ft != 0)
env_set(L"_", ft, ENV_GLOBAL);
free(ft);
if (! ft.empty())
env_set(L"_", ft.c_str(), ENV_GLOBAL);
reader_write_title();

View file

@ -642,24 +642,26 @@ const wchar_t *tok_string(tokenizer_t *tok)
return tok?tok->orig_buff:0;
}
wchar_t *tok_first(const wchar_t *str)
wcstring tok_first(const wchar_t *str)
{
wchar_t *res=0;
CHECK(str, 0);
tokenizer_t t(str, TOK_SQUASH_ERRORS);
switch (tok_last_type(&t))
wcstring result;
if (str)
{
case TOK_STRING:
// fwprintf( stderr, L"Got token %ls\n", tok_last( &t ));
res = wcsdup(tok_last(&t));
break;
default:
break;
tokenizer_t t(str, TOK_SQUASH_ERRORS);
switch (tok_last_type(&t))
{
case TOK_STRING:
{
const wchar_t *tmp = tok_last(&t);
if (tmp != NULL)
result = tmp;
break;
}
default:
break;
}
}
return res;
return result;
}
int tok_get_pos(tokenizer_t *tok)

View file

@ -156,9 +156,9 @@ const wchar_t *tok_string(tokenizer_t *tok);
convenience function, used to retrieve the first token of a
string. This can be useful for error messages, etc.
The string should be freed. After use.
On failure, returns the empty string.
*/
wchar_t *tok_first(const wchar_t *str);
wcstring tok_first(const wchar_t *str);
/**
Indicates whether a character can be part of a string, or is a string separator.