Merge branch 'master' of gnunet.org:gnunet
[oweals/gnunet.git] / src / include / gnunet_os_lib.h
index 1cb01d0384ee8173aae9fd4eaeefd0b7f9cf6977..285dfb68ded7af2577d27ac6ea8515ab4a6ee259 100644 (file)
@@ -2,20 +2,20 @@
      This file is part of GNUnet.
      Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2011 GNUnet e.V.
 
      This file is part of GNUnet.
      Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2011 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 3, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
      GNUnet is distributed in the hope that it will be useful, but
      WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-     General Public License for more details.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-     Boston, MA 02110-1301, USA.
+     SPDX-License-Identifier: AGPL3.0-or-later
 */
 
 /**
 */
 
 /**
@@ -240,6 +240,13 @@ struct GNUNET_OS_ProjectData
    */
   const char *env_varname_alt;
 
    */
   const char *env_varname_alt;
 
+  /**
+   * Name of an environment variable that can be used to override
+   * the location from which default configuration files are loaded
+   * from, for example "GNUNET_BASE_CONFIG".
+   */
+  const char *base_config_varname;
+
   /**
    * E-mail address for reporting bugs.
    */
   /**
    * E-mail address for reporting bugs.
    */
@@ -250,6 +257,16 @@ struct GNUNET_OS_ProjectData
    */
   const char *homepage;
 
    */
   const char *homepage;
 
+  /**
+   * Configuration file name (in $XDG_CONFIG_HOME) to use.
+   */
+  const char *config_file;
+
+  /**
+   * Configuration file name to use (if $XDG_CONFIG_HOME is not set).
+   */
+  const char *user_config_file;
+
 };
 
 
 };
 
 
@@ -364,7 +381,8 @@ GNUNET_OS_process_current (void);
  * @return 0 on success, -1 on error
  */
 int
  * @return 0 on success, -1 on error
  */
 int
-GNUNET_OS_process_kill (struct GNUNET_OS_Process *proc, int sig);
+GNUNET_OS_process_kill (struct GNUNET_OS_Process *proc,
+                        int sig);
 
 
 /**
 
 
 /**
@@ -507,7 +525,8 @@ struct GNUNET_OS_CommandHandle;
  * @param cls closure
  * @param line line of output from a command, NULL for the end
  */
  * @param cls closure
  * @param line line of output from a command, NULL for the end
  */
-typedef void (*GNUNET_OS_LineProcessor) (void *cls, const char *line);
+typedef void
+(*GNUNET_OS_LineProcessor) (void *cls, const char *line);
 
 
 /**
 
 
 /**
@@ -531,13 +550,15 @@ GNUNET_OS_command_stop (struct GNUNET_OS_CommandHandle *cmd);
  * @return NULL on error
  */
 struct GNUNET_OS_CommandHandle *
  * @return NULL on error
  */
 struct GNUNET_OS_CommandHandle *
-GNUNET_OS_command_run (GNUNET_OS_LineProcessor proc, void *proc_cls,
-                       struct GNUNET_TIME_Relative timeout, const char *binary,
+GNUNET_OS_command_run (GNUNET_OS_LineProcessor proc,
+                       void *proc_cls,
+                       struct GNUNET_TIME_Relative timeout,
+                       const char *binary,
                        ...);
 
 
 /**
                        ...);
 
 
 /**
- * Retrieve the status of a process, waiting on him if dead.
+ * Retrieve the status of a process, waiting on it if dead.
  * Nonblocking version.
  *
  * @param proc pointer to process structure
  * Nonblocking version.
  *
  * @param proc pointer to process structure
@@ -565,6 +586,22 @@ int
 GNUNET_OS_process_wait (struct GNUNET_OS_Process *proc);
 
 
 GNUNET_OS_process_wait (struct GNUNET_OS_Process *proc);
 
 
+
+/**
+ * Retrieve the status of a process, waiting on it if dead.
+ * Blocking version.
+ *
+ * @param proc pointer to process structure
+ * @param type status type
+ * @param code return code/signal number
+ * @return #GNUNET_OK on success, #GNUNET_NO if the process is still running, #GNUNET_SYSERR otherwise
+ */
+int
+GNUNET_OS_process_wait_status (struct GNUNET_OS_Process *proc,
+                               enum GNUNET_OS_ProcessStatusType *type,
+                               unsigned long *code);
+
+
 /**
  * Connects this process to its parent via pipe;
  * essentially, the parent control handler will read signal numbers
 /**
  * Connects this process to its parent via pipe;
  * essentially, the parent control handler will read signal numbers