lintian doesn't like orphan packages with uploaders...
[debian/amanda] / common-src / util.h
index 53082b6708b63de1ac73c988bcfa26dc3500ee4a..0e35bb8ac05f8c9f3dd5ab2cdd469c4a4efe943e 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
  * Copyright (c) 1999 University of Maryland at College Park
+ * Copyright (c) 2007-2012 Zmanda, Inc.  All Rights Reserved.
  * All Rights Reserved.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -30,7 +31,7 @@
 #define        UTIL_H
 
 #include "amanda.h"
-#include "sl.h"
+#include "am_sl.h"
 
 #include <glib.h>
 #include <glib-object.h>
@@ -62,6 +63,15 @@ int  connect_portrange(sockaddr_union *, in_port_t, in_port_t, char *,
 int    bind_portrange(int, sockaddr_union *, in_port_t, in_port_t,
                       char *);
 
+/* just like an accept() call, but periodically calling PROLONG(PROLONG_DATA) and
+ * returning -1 with errno set to 0 if PROLONG returns false.  Note that the socket
+ * need not be configured as non-blocking.
+ *
+ * Other arguments are just like for accept(2).
+ */
+int    interruptible_accept(int sock, struct sockaddr *addr, socklen_t *addrlen,
+           gboolean (*prolong)(gpointer data), gpointer prolong_data);
+
 ssize_t        full_writev(int, struct iovec *, int);
 
 char * construct_datestamp(time_t *t);
@@ -71,9 +81,11 @@ char *       construct_timestamp(time_t *t);
  * always adds "" around the string */
 #define quote_string(str) quote_string_maybe((str), 0)
 #define quote_string_always(str) quote_string_maybe((str), 1)
+#define len_quote_string(str) len_quote_string_maybe((str), 0);
 
 /*@only@*//*@null@*/char *quote_string_maybe(const char *str, gboolean always);
 /*@only@*//*@null@*/char *unquote_string(const char *str);
+/*@only@*//*@null@*/int   len_quote_string_maybe(const char *str, gboolean always);
 
 /* Split a string into space-delimited words, obeying quoting as created by
  * quote_string.  To keep compatibility with the old split(), this has the
@@ -119,17 +131,8 @@ char * hexdecode_string(const char *str, GError **err);
 int     copy_file(char *dst, char *src, char **errmsg);
 
 /* These two functions handle "braced alternates", which is a syntax borrowed,
- * partially, from shells.  Comma-separated strings enclosed in curly braces
- * expand into multiple alternatives for the entire string.
- * For example:
- *
- *   "{foo,bar,bat}" -> [ "foo", "bar", "bat" ]
- *   "foo{1,2}bar" -> [ "foo1bar", "foo2bar" ]
- *   "foo{1\,2,3}bar" -> [ "foo1,2bar", "foo3bar" ]
- *   "{a,b}-{1,2}" -> [ "a-1", "a-2", "b-1", "b-2" ]
- *
- * Note that nested braces are not processed.  Braces, commas, and backslashes
- * may be escaped with backslashes.  Returns NULL on invalid strings.
+ * partially, from shells.  See perl/Amanda/Util.pod for a full description of
+ * the syntax they support.
  */
 GPtrArray * expand_braced_alternates(char * source);
 char * collapse_braced_alternates(GPtrArray *source);
@@ -184,10 +187,10 @@ int compare_possibly_null_strings(const char * a, const char * b);
  * not NULL.
  *
  * @param hostname: the hostname to start with
+ * @param socktype: the socket type (SOCK_DGRAM or SOCK_STREAM)
  * @param res: (result) if not NULL, the results from getaddrinfo()
- * @param canonname: (result) if not NULL, the canonical name of the host
- * @returns: newly allocated canonical hostname, or NULL if no
- * canonical hostname was available.
+ * @param canonname: (result) if not NULL, the newly-allocated canonical name of the host
+ * @returns: 0 on success, otherwise a getaddrinfo result (for use with gai_strerror)
  */
 int resolve_hostname(const char *hostname, int socktype,
                     struct addrinfo **res, char **canonname);
@@ -335,52 +338,37 @@ pcontext_t get_pcontext(void);
  * or prototypes some simple stub functions that are used instead.
  */
 
-#ifdef HAVE_READLINE
-#  ifdef HAVE_READLINE_READLINE_H
+#ifdef HAVE_LIBREADLINE
+#  if defined(HAVE_READLINE_READLINE_H)
 #    include <readline/readline.h>
-#    ifdef HAVE_READLINE_HISTORY_H
-#      include <readline/history.h>
-#    endif
-#  else
-#    ifdef HAVE_READLINE_H
-#      include <readline.h>
-#      ifdef HAVE_HISTORY_H
-#        include <history.h>
-#      endif
-#    endif
-#  endif
-#else
-
-char * readline(const char *prompt);
-void   add_history(const char *line);
-
-#endif
+#  elif defined(HAVE_READLINE_H)
+#    include <readline.h>
+#  else /* !defined(HAVE_READLINE_H) */
+extern char *readline ();
+#  endif /* !defined(HAVE_READLINE_H) */
+   /* char *cmdline = NULL; */
+#else /* !defined(HAVE_LIBREADLINE) */
+  /* use our own readline */
+char * readline(const char *prompt);
+#endif /* HAVE_LIBREADLINE */
+
+#ifdef HAVE_READLINE_HISTORY
+#  if defined(HAVE_READLINE_HISTORY_H)
+#    include <readline/history.h>
+#  elif defined(HAVE_HISTORY_H)
+#    include <history.h>
+#  else /* !defined(HAVE_HISTORY_H) */
+extern void add_history ();
+extern int write_history ();
+extern int read_history ();
+#  endif /* defined(HAVE_READLINE_HISTORY_H) */
+#else /* !defined(HAVE_READLINE_HISTORY) */
+  /* use our own add_history */
+void   add_history(const char *line);
+#endif /* HAVE_READLINE_HISTORY */
 
 char *base64_decode_alloc_string(char *);
 
-/* A GHFunc (callback for g_hash_table_foreach),
- * Count the number of properties.
- *
- * @param key_p: (char *) property name.
- * @param value_p: (GSList *) property values list.
- * @param user_data_p: (int *) count are added to that value.
- */
-void count_proplist(gpointer key_p,
-                   gpointer value_p,
-                   gpointer user_data_p);
-
-/* A GHFunc (callback for g_hash_table_foreach),
- * Store a property and it's value in an ARGV.
- *
- * @param key_p: (char *) property name.
- * @param value_p: (GSList *) property values list.
- * @param user_data_p: (char ***) pointer to ARGV.
- */
-void proplist_add_to_argv(gpointer key_p,
-                         gpointer value_p,
-                         gpointer user_data_p);
-
-
 /* Inform the OpenBSD pthread library about the high-numbered file descriptors
  * that an amandad service inherits.  This won't be necessary once the new
  * threading library is availble (OpenBSD 5.0?), but won't hurt anyway.  See the
@@ -391,10 +379,22 @@ void openbsd_fd_inform(void);
 #define openbsd_fd_inform()
 #endif
 
+/* Add all properties to an ARGV
+ *
+ * @param argvchild: Pointer to the ARGV.
+ * @param proplist: The property list
+ */
+void property_add_to_argv(GPtrArray *argv_ptr, GHashTable *proplist);
+
 /* Print the argv_ptr with g_debug()
  *
  * @param argv_ptr: GPtrArray of an array to print.
  */
 void debug_executing(GPtrArray *argv_ptr);
 
+/* execute the program and get the first line from stdout ot stderr */
+char *get_first_line(GPtrArray *argv_ptr);
+
+gboolean make_amanda_tmpdir(void);
+
 #endif /* UTIL_H */