diff options
-rw-r--r-- | src/rc.h | 54 |
1 files changed, 43 insertions, 11 deletions
@@ -59,6 +59,16 @@ typedef enum RC_SERVICE_WASINACTIVE = 0x0800, } rc_service_state_t; +/*! Save the arguments to find a running daemon + * @param service to save arguments for + * @param exec that we started + * @param name of the process (optional) + * @param pidfile of the process (optional) + * @param started if true, add the arguments otherwise remove existing matching arguments */ +void rc_service_daemon_set (const char *service, const char *exec, + const char *name, const char *pidfile, + bool started); + /*! Returns a description of what the service and/or option does. * @param service to check * @param option to check (if NULL, service description) @@ -141,15 +151,6 @@ pid_t rc_service_stop (const char *service); * @return true if service finished before timeout, otherwise false */ bool rc_service_wait (const char *service); -/*! Save the arguments to find a running daemon - * @param service to save arguments for - * @param exec that we started - * @param name of the process (optional) - * @param pidfile of the process (optional) - * @param started if true, add the arguments otherwise remove existing matching arguments */ -void rc_service_daemon_set (const char *service, const char *exec, - const char *name, const char *pidfile, - bool started); /*! Check if the service started the daemon * @param service to check * @param exec to check @@ -166,6 +167,7 @@ bool rc_service_plugable (char *service); /*! Return the current runlevel. * @return the current runlevel */ char *rc_runlevel_get (void); + /*! Set the runlevel. * This just changes the stored runlevel and does not start or stop any services. * @param runlevel to store */ @@ -192,19 +194,23 @@ bool rc_runlevel_stopping (void); * @param service to add * @return true if successful, otherwise false */ bool rc_service_add (const char *runlevel, const char *service); + /*! Remove the service from the runlevel * @param runlevel to remove from * @param service to remove * @return true if sucessful, otherwise false */ bool rc_service_delete (const char *runlevel, const char *service); + /*! List the services in a runlevel * @param runlevel to list * @return NULL terminated list of services */ char **rc_services_in_runlevel (const char *runlevel); + /*! List the services in a state * @param state to list * @return NULL terminated list of services */ char **rc_services_in_state (rc_service_state_t state); + /*! List the services shceduled to start when this one does * @param service to check * @return NULL terminated list of services */ @@ -216,13 +222,11 @@ char **rc_services_scheduled (const char *service); * @return true if all daemons started are still running, otherwise false */ bool rc_service_daemons_crashed (const char *service); - /*! Wait for a process to finish * @param pid to wait for * @return exit status of the process */ int rc_waitpid (pid_t pid); - /*! Find processes based on criteria. * All of these are optional. * pid overrides anything else. @@ -262,27 +266,33 @@ typedef void *rc_depinfo_t; * has specified. * @return 0 if successful, otherwise -1 */ int rc_deptree_update (void); + /*! Check if the cached dependency tree is older than any init script, * its configuration file or an external configuration file the init script * has specified. * @return true if it needs updating, otherwise false */ bool rc_deptree_update_needed (void); + /*! Load the cached dependency tree and return a pointer to it. * This pointer should be freed with rc_deptree_free when done. * @return pointer to the dependency tree */ rc_depinfo_t *rc_deptree_load (void); + /*! Get a services depedency information from a loaded tree * @param deptree to search * @param service to find * @return service dependency information */ rc_depinfo_t *rc_deptree_depinfo (rc_depinfo_t *deptree, const char *service); + /*! Get a depenency type from the service dependency information * @param depinfo service dependency to search * @param type to find * @return service dependency type information */ rc_deptype_t *rc_deptree_deptype (rc_depinfo_t *depinfo, const char *type); + char **rc_deptree_depends (rc_depinfo_t *deptree, char **types, char **services, const char *runlevel, int options); + /*! List all the services that should be stoppned and then started, in order, * for the given runlevel, including sysinit and boot services where * approriate. @@ -341,15 +351,18 @@ extern FILE *rc_environ_fd; /*! @name Memory Allocation * Ensure that if we cannot allocate the memory then we exit */ /*@{*/ + /*! Allocate a block of memory * @param size of memory to allocate * @return pointer to memory */ void *rc_xmalloc (size_t size); + /*! Re-size a block of memory * @param ptr to the block of memory to re-size * @param size memory should be * @return pointer to memory block */ void *rc_xrealloc (void *ptr, size_t size); + /*! Duplicate a NULL terminated string * @param str to duplicate * @return pointer to the new string */ @@ -359,34 +372,41 @@ char *rc_xstrdup (const char *str); /*! @name Utility * Although not RC specific functions, they are used by the supporting * applications */ + /*! Concatenate paths adding '/' if needed. The resultant pointer should be * freed when finished with. * @param path1 starting path * @param paths NULL terminated list of paths to add * @return pointer to the new path */ char *rc_strcatpaths (const char *path1, const char *paths, ...) SENTINEL; + /*! Check if an environment variable is a boolean and return it's value. * If variable is not a boolean then we set errno to be ENOENT when it does * not exist or EINVAL if it's not a boolean. * @param variable to check * @return true if it matches true, yes or 1, false if otherwise. */ bool rc_env_bool (const char *variable); + /*! Check if the file exists or not * @param pathname to check * @return true if it exists, otherwise false */ bool rc_exists (const char *pathname); + /*! Check if the file is a real file * @param pathname to check * @return true if it's a real file, otherwise false */ bool rc_is_file (const char *pathname); + /*! Check if the file is a symbolic link or not * @param pathname to check * @return true if it's a symbolic link, otherwise false */ bool rc_is_link (const char *pathname); + /*! Check if the file is a directory or not * @param pathname to check * @return true if it's a directory, otherwise false */ bool rc_is_dir (const char *pathname); + /*! Check if the file is marked executable or not * @param pathname to check * @return true if it's marked executable, otherwise false */ @@ -407,14 +427,17 @@ bool rc_rm_dir (const char *pathname, bool top); /*! @name Configuration */ /*! Return a NULL terminated list of non comment lines from a file. */ char **rc_get_list (const char *file); + /*! Return a NULL terminated list of key=value lines from a file. */ char **rc_get_config (const char *file); + /*! Return the value of the entry from a key=value list. */ char *rc_get_config_entry (char **list, const char *entry); /*! Return a NULL terminated string list of variables allowed through * from the current environemnt. */ char **rc_filter_env (void); + /*! Return a NULL terminated string list of enviroment variables made from * our configuration files. */ char **rc_make_env (void); @@ -424,49 +447,58 @@ char **rc_make_env (void); * It's safe to assume that any function here that uses char ** is a string * list that can be manipulated with the below functions. Every string list * should be released with a call to rc_strlist_free.*/ + /*! Duplicate the item, add it to end of the list and return a pointer to it. * @param list to add the item too * @param item to add. * @return pointer to newly added item */ char *rc_strlist_add (char ***list, const char *item); + /*! If the item does not exist in the list, duplicate it, add it to the * list and then return a pointer to it. * @param list to add the item too * @param item to add. * @return pointer to newly added item */ char *rc_strlist_addu (char ***list, const char *item); + /*! Duplicate the item, add it to the list at the point based on locale and * then return a pointer to it. * @param list to add the item too * @param item to add. * @return pointer to newly added item */ char *rc_strlist_addsort (char ***list, const char *item); + /*! Duplicate the item, add it to the list at the point based on C locale and * then return a pointer to it. * @param list to add the item too * @param item to add. * @return pointer to newly added item */ char *rc_strlist_addsortc (char ***list, const char *item); + /*! If the item does not exist in the list, duplicate it, add it to the * list based on locale and then return a pointer to it. * @param list to add the item too * @param item to add. * @return pointer to newly added item */ char *rc_strlist_addsortu (char ***list, const char *item); + /*! Free the item and remove it from the list. Return 0 on success otherwise -1. * @param list to add the item too * @param item to add. * @return true on success, otherwise false */ bool rc_strlist_delete (char ***list, const char *item); + /*! Moves the contents of list2 onto list1, so list2 is effectively emptied. * Returns a pointer to the last item on the new list. * @param list1 to append to * @param list2 to move from * @return pointer to the last item on the list */ char *rc_strlist_join (char ***list1, char **list2); + /*! Reverses the contents of the list. * @param list to reverse */ void rc_strlist_reverse (char **list); + /*! Frees each item on the list and the list itself. * @param list to free */ void rc_strlist_free (char **list); |