diff options
| author | Francesco Abbate <francesco.bbt@gmail.com> | 2022-01-08 17:22:23 +0100 |
|---|---|---|
| committer | Francesco Abbate <francesco.bbt@gmail.com> | 2022-01-09 23:26:11 +0100 |
| commit | f0aea5b1a4a78f9bf61063bd4bd7d35f49f7c6aa (patch) | |
| tree | cad58c25e3e3ffe0dc7677f96e2aaecbb373f6cb | |
| parent | 39366d3a097b1f5d9fe1118da71f9a1c2e8b1dfe (diff) | |
| download | lite-xl-f0aea5b1a4a78f9bf61063bd4bd7d35f49f7c6aa.tar.gz lite-xl-f0aea5b1a4a78f9bf61063bd4bd7d35f49f7c6aa.zip | |
Report error codes from dmon_watch_add
| -rw-r--r-- | lib/dmon/dmon.h | 4 | ||||
| -rw-r--r-- | lib/dmon/dmon_extra.h | 8 | ||||
| -rw-r--r-- | src/api/system.c | 9 |
3 files changed, 17 insertions, 4 deletions
diff --git a/lib/dmon/dmon.h b/lib/dmon/dmon.h index 496463f1..1a7eed3b 100644 --- a/lib/dmon/dmon.h +++ b/lib/dmon/dmon.h @@ -107,7 +107,8 @@ typedef enum dmon_error_enum { DMON_ERROR_OPEN_DIR, DMON_ERROR_MONITOR_FAIL, DMON_ERROR_UNSUPPORTED_SYMLINK, - DMON_ERROR_END, + DMON_ERROR_SUBDIR_LOCATION, + DMON_ERROR_END } dmon_error; #ifdef __cplusplus @@ -364,6 +365,7 @@ static const char *dmon__errors[] = { "Error opening directory", "Error enabling monitoring", "Error support for symlink disabled", + "Error not a subdirectory", }; DMON_API_IMPL const char *dmon_error_str(dmon_error err) { diff --git a/lib/dmon/dmon_extra.h b/lib/dmon/dmon_extra.h index 9b201e17..2252c88e 100644 --- a/lib/dmon/dmon_extra.h +++ b/lib/dmon/dmon_extra.h @@ -27,7 +27,7 @@ extern "C" { #endif -DMON_API_DECL bool dmon_watch_add(dmon_watch_id id, const char* subdir); +DMON_API_DECL bool dmon_watch_add(dmon_watch_id id, const char* subdir, dmon_error *error_code); DMON_API_DECL bool dmon_watch_rm(dmon_watch_id id, const char* watchdir); #ifdef __cplusplus @@ -36,7 +36,7 @@ DMON_API_DECL bool dmon_watch_rm(dmon_watch_id id, const char* watchdir); #ifdef DMON_IMPL #if DMON_OS_LINUX -DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir) +DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir, dmon_error *error_code) { DMON_ASSERT(id.id > 0 && id.id <= DMON_MAX_WATCHES); @@ -64,6 +64,7 @@ DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir) dmon__strcpy(fullpath, sizeof(fullpath), watch->rootdir); dmon__strcat(fullpath, sizeof(fullpath), watchdir); if (stat(fullpath, &st) != 0 || (st.st_mode & S_IFDIR) == 0) { + *error_code = DMON_ERROR_UNSUPPORTED_SYMLINK; if (!skip_lock) pthread_mutex_unlock(&_dmon.mutex); return false; @@ -80,6 +81,7 @@ DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir) // check that the directory is not already added for (int i = 0, c = stb_sb_count(watch->subdirs); i < c; i++) { if (strcmp(subdir.rootdir, watch->subdirs[i].rootdir) == 0) { + *error_code = DMON_ERROR_SUBDIR_LOCATION; if (!skip_lock) pthread_mutex_unlock(&_dmon.mutex); return false; @@ -92,6 +94,7 @@ DMON_API_IMPL bool dmon_watch_add(dmon_watch_id id, const char* watchdir) dmon__strcat(fullpath, sizeof(fullpath), subdir.rootdir); int wd = inotify_add_watch(watch->fd, fullpath, inotify_mask); if (wd == -1) { + *error_code = DMON_ERROR_WATCH_DIR; if (!skip_lock) pthread_mutex_unlock(&_dmon.mutex); return false; @@ -136,6 +139,7 @@ DMON_API_IMPL bool dmon_watch_rm(dmon_watch_id id, const char* watchdir) } } if (i >= c) { + *error_code = DMON_ERROR_SUBDIR_LOCATION; if (!skip_lock) pthread_mutex_unlock(&_dmon.mutex); return false; diff --git a/src/api/system.c b/src/api/system.c index 1a862f78..45776b51 100644 --- a/src/api/system.c +++ b/src/api/system.c @@ -753,7 +753,14 @@ static int f_watch_dir_add(lua_State *L) { dmon_watch_id watch_id; watch_id.id = luaL_checkinteger(L, 1); const char *subdir = luaL_checkstring(L, 2); - lua_pushboolean(L, dmon_watch_add(watch_id, subdir)); + dmon_error error_code; + int success = dmon_watch_add(watch_id, subdir, &error_code) + if (!success) { + lua_pushboolean(L, 0); + lua_pushstring(L, dmon_error_str(error_code)); + return 2; + } + lua_pushboolean(L, 1); return 1; } |
