mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-25 08:36:35 +08:00
More cleanup based on static analysis
https://github.com/fish-shell/fish-shell/issues/575
This commit is contained in:
parent
dc54ec5b2b
commit
4416753df0
|
@ -487,7 +487,7 @@ void read_message(connection_t *src)
|
||||||
{
|
{
|
||||||
src->killme = 1;
|
src->killme = 1;
|
||||||
debug(3, L"Fd %d has reached eof, set killme flag", src->fd);
|
debug(3, L"Fd %d has reached eof, set killme flag", src->fd);
|
||||||
if (src->input.size() > 0)
|
if (! src->input.empty())
|
||||||
{
|
{
|
||||||
char c = 0;
|
char c = 0;
|
||||||
src->input.push_back(c);
|
src->input.push_back(c);
|
||||||
|
@ -799,10 +799,7 @@ message_t *create_message(fish_message_type_t type,
|
||||||
const wchar_t *key_in,
|
const wchar_t *key_in,
|
||||||
const wchar_t *val_in)
|
const wchar_t *val_in)
|
||||||
{
|
{
|
||||||
message_t *msg = new message_t;
|
char *key = NULL;
|
||||||
msg->count = 0;
|
|
||||||
|
|
||||||
char *key=0;
|
|
||||||
|
|
||||||
// debug( 4, L"Crete message of type %d", type );
|
// debug( 4, L"Crete message of type %d", type );
|
||||||
|
|
||||||
|
@ -811,7 +808,7 @@ message_t *create_message(fish_message_type_t type,
|
||||||
if (wcsvarname(key_in))
|
if (wcsvarname(key_in))
|
||||||
{
|
{
|
||||||
debug(0, L"Illegal variable name: '%ls'", key_in);
|
debug(0, L"Illegal variable name: '%ls'", key_in);
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
key = wcs2utf(key_in);
|
key = wcs2utf(key_in);
|
||||||
|
@ -820,10 +817,12 @@ message_t *create_message(fish_message_type_t type,
|
||||||
debug(0,
|
debug(0,
|
||||||
L"Could not convert %ls to narrow character string",
|
L"Could not convert %ls to narrow character string",
|
||||||
key_in);
|
key_in);
|
||||||
return 0;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message_t *msg = new message_t;
|
||||||
|
msg->count = 0;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -839,7 +838,6 @@ message_t *create_message(fish_message_type_t type,
|
||||||
char *val = wcs2utf(esc.c_str());
|
char *val = wcs2utf(esc.c_str());
|
||||||
set_body(msg, (type==SET?SET_MBS:SET_EXPORT_MBS), " ", key, ":", val, "\n", NULL);
|
set_body(msg, (type==SET?SET_MBS:SET_EXPORT_MBS), " ", key, ":", val, "\n", NULL);
|
||||||
free(val);
|
free(val);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
2
exec.cpp
2
exec.cpp
|
@ -1191,7 +1191,7 @@ void exec(parser_t &parser, job_t *j)
|
||||||
skip_fork = true;
|
skip_fork = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (io_chain_t::iterator iter = j->io.begin(); iter != j->io.end(); iter++)
|
for (io_chain_t::iterator iter = j->io.begin(); iter != j->io.end(); ++iter)
|
||||||
{
|
{
|
||||||
const shared_ptr<io_data_t> &tmp_io = *iter;
|
const shared_ptr<io_data_t> &tmp_io = *iter;
|
||||||
if (tmp_io->io_mode == IO_FILE && strcmp(static_cast<const io_file_t *>(tmp_io.get())->filename_cstr, "/dev/null") != 0)
|
if (tmp_io->io_mode == IO_FILE && strcmp(static_cast<const io_file_t *>(tmp_io.get())->filename_cstr, "/dev/null") != 0)
|
||||||
|
|
82
fishd.cpp
82
fishd.cpp
|
@ -157,9 +157,8 @@ static int quit=0;
|
||||||
/**
|
/**
|
||||||
Constructs the fish socket filename
|
Constructs the fish socket filename
|
||||||
*/
|
*/
|
||||||
static char *get_socket_filename()
|
static std::string get_socket_filename(void)
|
||||||
{
|
{
|
||||||
char *name;
|
|
||||||
const char *dir = getenv("FISHD_SOCKET_DIR");
|
const char *dir = getenv("FISHD_SOCKET_DIR");
|
||||||
char *uname = getenv("USER");
|
char *uname = getenv("USER");
|
||||||
|
|
||||||
|
@ -170,25 +169,20 @@ static char *get_socket_filename()
|
||||||
|
|
||||||
if (uname == NULL)
|
if (uname == NULL)
|
||||||
{
|
{
|
||||||
struct passwd *pw;
|
const struct passwd *pw = getpwuid(getuid());
|
||||||
pw = getpwuid(getuid());
|
uname = pw->pw_name;
|
||||||
uname = strdup(pw->pw_name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
name = (char *)malloc(strlen(dir)+ strlen(uname)+ strlen(SOCK_FILENAME) + 2);
|
std::string name;
|
||||||
if (name == NULL)
|
name.reserve(strlen(dir)+ strlen(uname)+ strlen(SOCK_FILENAME) + 1);
|
||||||
{
|
name.append(dir);
|
||||||
wperror(L"get_socket_filename");
|
name.push_back('/');
|
||||||
exit(EXIT_FAILURE);
|
name.append(SOCK_FILENAME);
|
||||||
}
|
name.append(uname);
|
||||||
strcpy(name, dir);
|
|
||||||
strcat(name, "/");
|
|
||||||
strcat(name, SOCK_FILENAME);
|
|
||||||
strcat(name, uname);
|
|
||||||
|
|
||||||
if (strlen(name) >= UNIX_PATH_MAX)
|
if (name.size() >= UNIX_PATH_MAX)
|
||||||
{
|
{
|
||||||
debug(1, L"Filename too long: '%s'", name);
|
debug(1, L"Filename too long: '%s'", name.c_str());
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
|
@ -256,7 +250,7 @@ static void sprint_rand_digits(char *str, int maxlen)
|
||||||
fallback.
|
fallback.
|
||||||
The memory returned should be freed using free().
|
The memory returned should be freed using free().
|
||||||
*/
|
*/
|
||||||
static std::string gen_unique_nfs_filename(const char *filename)
|
static std::string gen_unique_nfs_filename(const std::string &filename)
|
||||||
{
|
{
|
||||||
char hostname[HOST_NAME_MAX + 1];
|
char hostname[HOST_NAME_MAX + 1];
|
||||||
char pid_str[256];
|
char pid_str[256];
|
||||||
|
@ -403,7 +397,7 @@ static std::string get_machine_identifier(void)
|
||||||
A unique temporary file named by appending characters to the lockfile name
|
A unique temporary file named by appending characters to the lockfile name
|
||||||
is used; any pre-existing file of the same name is subject to deletion.
|
is used; any pre-existing file of the same name is subject to deletion.
|
||||||
*/
|
*/
|
||||||
static int acquire_lock_file(const char *lockfile, const int timeout, int force)
|
static int acquire_lock_file(const std::string &lockfile_str, const int timeout, int force)
|
||||||
{
|
{
|
||||||
int fd, timed_out = 0;
|
int fd, timed_out = 0;
|
||||||
int ret = 0; /* early exit returns failure */
|
int ret = 0; /* early exit returns failure */
|
||||||
|
@ -411,6 +405,7 @@ static int acquire_lock_file(const char *lockfile, const int timeout, int force)
|
||||||
struct timeval start, end;
|
struct timeval start, end;
|
||||||
double elapsed;
|
double elapsed;
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
|
const char * const lockfile = lockfile_str.c_str();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
(Re)create a unique file and check that it has one only link.
|
(Re)create a unique file and check that it has one only link.
|
||||||
|
@ -514,52 +509,47 @@ done:
|
||||||
The returned string must be free()d after unlink()ing the file to release
|
The returned string must be free()d after unlink()ing the file to release
|
||||||
the lock
|
the lock
|
||||||
*/
|
*/
|
||||||
static char *acquire_socket_lock(const char *sock_name)
|
static bool acquire_socket_lock(const std::string &sock_name, std::string *out_lockfile_name)
|
||||||
{
|
{
|
||||||
size_t len = strlen(sock_name);
|
bool success = false;
|
||||||
char *lockfile = (char *)malloc(len + strlen(LOCKPOSTFIX) + 1);
|
std::string lockfile;
|
||||||
|
lockfile.reserve(sock_name.size() + strlen(LOCKPOSTFIX));
|
||||||
if (lockfile == NULL)
|
lockfile = sock_name;
|
||||||
|
lockfile.append(LOCKPOSTFIX);
|
||||||
|
if (acquire_lock_file(lockfile, LOCKTIMEOUT, 1))
|
||||||
{
|
{
|
||||||
wperror(L"acquire_socket_lock");
|
out_lockfile_name->swap(lockfile);
|
||||||
exit(EXIT_FAILURE);
|
success = true;
|
||||||
}
|
}
|
||||||
strcpy(lockfile, sock_name);
|
return success;
|
||||||
strcpy(lockfile + len, LOCKPOSTFIX);
|
|
||||||
if (!acquire_lock_file(lockfile, LOCKTIMEOUT, 1))
|
|
||||||
{
|
|
||||||
free(lockfile);
|
|
||||||
lockfile = NULL;
|
|
||||||
}
|
|
||||||
return lockfile;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Connects to the fish socket and starts listening for connections
|
Connects to the fish socket and starts listening for connections
|
||||||
*/
|
*/
|
||||||
static int get_socket()
|
static int get_socket(void)
|
||||||
{
|
{
|
||||||
int s, len, doexit = 0;
|
int s, len, doexit = 0;
|
||||||
int exitcode = EXIT_FAILURE;
|
int exitcode = EXIT_FAILURE;
|
||||||
struct sockaddr_un local;
|
struct sockaddr_un local;
|
||||||
char *sock_name = get_socket_filename();
|
const std::string sock_name = get_socket_filename();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Start critical section protected by lock
|
Start critical section protected by lock
|
||||||
*/
|
*/
|
||||||
char *lockfile = acquire_socket_lock(sock_name);
|
std::string lockfile;
|
||||||
if (lockfile == NULL)
|
if (! acquire_socket_lock(sock_name, &lockfile))
|
||||||
{
|
{
|
||||||
debug(0, L"Unable to obtain lock on socket, exiting");
|
debug(0, L"Unable to obtain lock on socket, exiting");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
debug(4, L"Acquired lockfile: %s", lockfile);
|
debug(4, L"Acquired lockfile: %s", lockfile.c_str());
|
||||||
|
|
||||||
local.sun_family = AF_UNIX;
|
local.sun_family = AF_UNIX;
|
||||||
strcpy(local.sun_path, sock_name);
|
strcpy(local.sun_path, sock_name.c_str());
|
||||||
len = sizeof(local);
|
len = sizeof(local);
|
||||||
|
|
||||||
debug(1, L"Connect to socket at %s", sock_name);
|
debug(1, L"Connect to socket at %s", sock_name.c_str());
|
||||||
|
|
||||||
if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
|
if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
|
||||||
{
|
{
|
||||||
|
@ -601,19 +591,15 @@ static int get_socket()
|
||||||
}
|
}
|
||||||
|
|
||||||
unlock:
|
unlock:
|
||||||
(void)unlink(lockfile);
|
(void)unlink(lockfile.c_str());
|
||||||
debug(4, L"Released lockfile: %s", lockfile);
|
debug(4, L"Released lockfile: %s", lockfile.c_str());
|
||||||
/*
|
/*
|
||||||
End critical section protected by lock
|
End critical section protected by lock
|
||||||
*/
|
*/
|
||||||
|
|
||||||
free(lockfile);
|
|
||||||
|
|
||||||
free(sock_name);
|
|
||||||
|
|
||||||
if (doexit)
|
if (doexit)
|
||||||
{
|
{
|
||||||
exit(exitcode);
|
exit_without_destructors(exitcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
|
|
|
@ -564,7 +564,7 @@ void parse_util_set_argv(const wchar_t * const *argv, const wcstring_list_t &nam
|
||||||
env_set(L"argv", 0, ENV_LOCAL);
|
env_set(L"argv", 0, ENV_LOCAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (named_arguments.size())
|
if (! named_arguments.empty())
|
||||||
{
|
{
|
||||||
const wchar_t * const *arg;
|
const wchar_t * const *arg;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
|
@ -735,11 +735,10 @@ void reader_write_title()
|
||||||
proc_push_interactive(0);
|
proc_push_interactive(0);
|
||||||
if (exec_subshell(title, lst, false /* do not apply exit status */) != -1)
|
if (exec_subshell(title, lst, false /* do not apply exit status */) != -1)
|
||||||
{
|
{
|
||||||
size_t i;
|
if (! lst.empty())
|
||||||
if (lst.size() > 0)
|
|
||||||
{
|
{
|
||||||
writestr(L"\x1b]0;");
|
writestr(L"\x1b]0;");
|
||||||
for (i=0; i<lst.size(); i++)
|
for (size_t i=0; i<lst.size(); i++)
|
||||||
{
|
{
|
||||||
writestr(lst.at(i).c_str());
|
writestr(lst.at(i).c_str());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1049,7 +1049,7 @@ struct screen_layout_t
|
||||||
/* Given a vector whose indexes are offsets and whose values are the widths of the string if truncated at that offset, return the offset that fits in the given width. Returns width_by_offset.size() - 1 if they all fit. The first value in width_by_offset is assumed to be 0. */
|
/* Given a vector whose indexes are offsets and whose values are the widths of the string if truncated at that offset, return the offset that fits in the given width. Returns width_by_offset.size() - 1 if they all fit. The first value in width_by_offset is assumed to be 0. */
|
||||||
static size_t truncation_offset_for_width(const std::vector<size_t> &width_by_offset, size_t max_width)
|
static size_t truncation_offset_for_width(const std::vector<size_t> &width_by_offset, size_t max_width)
|
||||||
{
|
{
|
||||||
assert(width_by_offset.size() > 0 && width_by_offset.at(0) == 0);
|
assert(! width_by_offset.empty() && width_by_offset.at(0) == 0);
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i=1; i < width_by_offset.size(); i++)
|
for (i=1; i < width_by_offset.size(); i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -338,7 +338,7 @@ static wcstring complete_get_desc_suffix_internal(const wcstring &suff)
|
||||||
|
|
||||||
if (exec_subshell(cmd, lst, false /* do not apply exit status */) != -1)
|
if (exec_subshell(cmd, lst, false /* do not apply exit status */) != -1)
|
||||||
{
|
{
|
||||||
if (lst.size()>0)
|
if (! lst.empty())
|
||||||
{
|
{
|
||||||
const wcstring & ln = lst.at(0);
|
const wcstring & ln = lst.at(0);
|
||||||
if (ln.size() > 0 && ln != L"unknown")
|
if (ln.size() > 0 && ln != L"unknown")
|
||||||
|
@ -620,7 +620,7 @@ static void wildcard_completion_allocate(std::vector<completion_t> &list,
|
||||||
bool wants_desc = !(expand_flags & EXPAND_NO_DESCRIPTIONS);
|
bool wants_desc = !(expand_flags & EXPAND_NO_DESCRIPTIONS);
|
||||||
wcstring desc;
|
wcstring desc;
|
||||||
if (wants_desc)
|
if (wants_desc)
|
||||||
desc = file_get_desc(fullname.c_str(), lstat_res, lbuf, stat_res, buf, stat_errno);
|
desc = file_get_desc(fullname, lstat_res, lbuf, stat_res, buf, stat_errno);
|
||||||
|
|
||||||
if (sz >= 0 && S_ISDIR(buf.st_mode))
|
if (sz >= 0 && S_ISDIR(buf.st_mode))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue
Block a user