summaryrefslogtreecommitdiffstats
path: root/src/afb-autoset.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/afb-autoset.c')
-rw-r--r--src/afb-autoset.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/afb-autoset.c b/src/afb-autoset.c
index 102830cb..b8f8a2ef 100644
--- a/src/afb-autoset.c
+++ b/src/afb-autoset.c
@@ -73,6 +73,8 @@ static int add(const char *path, struct afb_apiset *declare_set, struct afb_apis
return 0;
}
+/*******************************************************************/
+
static int create_ws(const char *path, struct afb_apiset *declare_set, struct afb_apiset *call_set)
{
return afb_api_ws_add_client(path, declare_set, call_set, 0) >= 0;
@@ -88,6 +90,8 @@ int afb_autoset_add_ws(const char *path, struct afb_apiset *declare_set, struct
return add(path, declare_set, call_set, onlack_ws);
}
+/*******************************************************************/
+
static int create_so(const char *path, struct afb_apiset *declare_set, struct afb_apiset *call_set)
{
return afb_api_so_add_binding(path, declare_set, call_set) >= 0;
@@ -102,3 +106,38 @@ int afb_autoset_add_so(const char *path, struct afb_apiset *declare_set, struct
{
return add(path, declare_set, call_set, onlack_so);
}
+
+/*******************************************************************/
+
+static int create_any(const char *path, struct afb_apiset *declare_set, struct afb_apiset *call_set)
+{
+ int rc;
+ struct stat st;
+
+ rc = stat(path, &st);
+ if (!rc) {
+ switch(st.st_mode & S_IFMT) {
+ case S_IFREG:
+ rc = afb_api_so_add_binding(path, declare_set, call_set);
+ break;
+ case S_IFSOCK:
+ rc = afb_api_ws_add_client(path, declare_set, call_set, 0);
+ break;
+ default:
+ NOTICE("Unexpected autoset entry: %s", path);
+ rc = -1;
+ break;
+ }
+ }
+ return rc >= 0;
+}
+
+static int onlack_any(void *closure, struct afb_apiset *set, const char *name)
+{
+ return onlack(closure, set, name, create_any);
+}
+
+int afb_autoset_add_any(const char *path, struct afb_apiset *declare_set, struct afb_apiset *call_set)
+{
+ return add(path, declare_set, call_set, onlack_any);
+}