Fix undue asserts in dmon_extra

Some asserts are placed in case that can effectively occur
so we remove the assertion and we return false. In turn we
adapt the logic accordingly so when false is returned to add
a watch we do not open that directory.
This commit is contained in:
Francesco Abbate 2022-01-06 00:10:14 +01:00
parent 5032e7352e
commit 7473fbf32c
3 changed files with 9 additions and 11 deletions

View File

@ -224,14 +224,14 @@ end
function core.project_subdir_set_show(dir, filename, show) function core.project_subdir_set_show(dir, filename, show)
dir.shown_subdir[filename] = show
if dir.files_limit and not dir.force_rescan then if dir.files_limit and not dir.force_rescan then
local fullpath = dir.name .. PATHSEP .. filename local fullpath = dir.name .. PATHSEP .. filename
local success = (show and system.watch_dir_add or system.watch_dir_rm)(dir.watch_id, fullpath) if not (show and system.watch_dir_add or system.watch_dir_rm)(dir.watch_id, fullpath) then
if not success then return false
core.log("Internal warning: error calling system.watch_dir_%s", show and "add" or "rm")
end end
end end
dir.shown_subdir[filename] = show
return true
end end

View File

@ -230,12 +230,14 @@ function TreeView:on_mouse_pressed(button, x, y, clicks)
if keymap.modkeys["ctrl"] and button == "left" then if keymap.modkeys["ctrl"] and button == "left" then
create_directory_in(hovered_item) create_directory_in(hovered_item)
else else
hovered_item.expanded = not hovered_item.expanded
local hovered_dir = core.project_dir_by_name(hovered_item.dir_name) local hovered_dir = core.project_dir_by_name(hovered_item.dir_name)
if hovered_dir and hovered_dir.files_limit then if hovered_dir and hovered_dir.files_limit then
core.update_project_subdir(hovered_dir, hovered_item.filename, hovered_item.expanded) if not core.project_subdir_set_show(hovered_dir, hovered_item.filename, not hovered_item.expanded) then
core.project_subdir_set_show(hovered_dir, hovered_item.filename, hovered_item.expanded) return
end
core.update_project_subdir(hovered_dir, hovered_item.filename, not hovered_item.expanded)
end end
hovered_item.expanded = not hovered_item.expanded
end end
else else
core.try(function() core.try(function()

View File

@ -62,7 +62,6 @@ DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir)
dmon__strcpy(fullpath, sizeof(fullpath), watch->rootdir); dmon__strcpy(fullpath, sizeof(fullpath), watch->rootdir);
dmon__strcat(fullpath, sizeof(fullpath), watchdir); dmon__strcat(fullpath, sizeof(fullpath), watchdir);
if (stat(fullpath, &st) != 0 || (st.st_mode & S_IFDIR) == 0) { if (stat(fullpath, &st) != 0 || (st.st_mode & S_IFDIR) == 0) {
_DMON_LOG_ERRORF("Watch directory '%s' is not valid", watchdir);
if (!skip_lock) if (!skip_lock)
pthread_mutex_unlock(&_dmon.mutex); pthread_mutex_unlock(&_dmon.mutex);
return false; return false;
@ -79,7 +78,6 @@ DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir)
// check that the directory is not already added // check that the directory is not already added
for (int i = 0, c = stb_sb_count(watch->subdirs); i < c; i++) { for (int i = 0, c = stb_sb_count(watch->subdirs); i < c; i++) {
if (strcmp(subdir.rootdir, watch->subdirs[i].rootdir) == 0) { if (strcmp(subdir.rootdir, watch->subdirs[i].rootdir) == 0) {
_DMON_LOG_ERRORF("Error watching directory '%s', because it is already added.", watchdir);
if (!skip_lock) if (!skip_lock)
pthread_mutex_unlock(&_dmon.mutex); pthread_mutex_unlock(&_dmon.mutex);
return false; return false;
@ -92,7 +90,6 @@ DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir)
dmon__strcat(fullpath, sizeof(fullpath), subdir.rootdir); dmon__strcat(fullpath, sizeof(fullpath), subdir.rootdir);
int wd = inotify_add_watch(watch->fd, fullpath, inotify_mask); int wd = inotify_add_watch(watch->fd, fullpath, inotify_mask);
if (wd == -1) { if (wd == -1) {
_DMON_LOG_ERRORF("Error watching directory '%s'. (inotify_add_watch:err=%d)", watchdir, errno);
if (!skip_lock) if (!skip_lock)
pthread_mutex_unlock(&_dmon.mutex); pthread_mutex_unlock(&_dmon.mutex);
return false; return false;
@ -137,7 +134,6 @@ DMON_API_IMPL bool dmon_watch_rm(dmon_watch_id id, const char* watchdir)
} }
} }
if (i >= c) { if (i >= c) {
_DMON_LOG_ERRORF("Watch directory '%s' is not valid", watchdir);
if (!skip_lock) if (!skip_lock)
pthread_mutex_unlock(&_dmon.mutex); pthread_mutex_unlock(&_dmon.mutex);
return false; return false;