if (!SLIST_EMPTY(&gTraceInfo.bins_info.bins_list) &&
(_find_binary_no_lock(real_path) != NULL)) {
- ret = EALREADY;
+ ret = -EALREADY;
goto free_real_path;
}
return ret;
}
+/* Return 0 if binary added or already exists, -errcode otherwise */
+int add_binary_on_demand(char *path)
+{
+ int ret;
+
+ ret = add_binary(path);
+ if (!ret || ret == -EALREADY)
+ return 0;
+
+ return ret;
+}
+
/* Returns 0 on success, -errcode on fail */
int remove_binary(char *path)
{
ptr += len;
/* TODO Think about removing binaries */
- ret = add_binary(path);
- if (ret < 0)
+ ret = add_binary_on_demand(path);
+ if (!ret)
PRINTERR("Adding failed, error code %d", ret);
- /* add_binary() allocates new buffer with realpath(), so this
- * path should be freed */
+ /* add_binary_on_demand() allocates new buffer with realpath(),
+ * so this path should be freed */
free(path);
}
}
/* Binaries list functions */
int add_binary(char *path);
+int add_binary_on_demand(char *path);
bool check_binary(const char *path);
int remove_binary(char *path);
void cleanup_binaries(void);