/*-- in lvm.c --*/
extern int lv_canonical (const char *device, char **ret);
+/*-- in lvm-filter.c --*/
+extern void copy_lvm (void);
+
/*-- in proto.c --*/
extern void main_loop (int sock) __attribute__((noreturn));
extern void pulse_mode_end (void);
extern void pulse_mode_cancel (void);
+/* Return true iff the buffer is all zero bytes.
+ *
+ * Note that gcc is smart enough to optimize this properly:
+ * http://stackoverflow.com/questions/1493936/faster-means-of-checking-for-an-empty-buffer-in-c/1493989#1493989
+ */
+static inline int
+is_zero (const char *buffer, size_t size)
+{
+ size_t i;
+
+ for (i = 0; i < size; ++i) {
+ if (buffer[i] != 0)
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Helper for building up short lists of arguments. Your code has to
+ * define MAX_ARGS to a suitable value.
+ */
+#define ADD_ARG(argv,i,v) \
+ do { \
+ if ((i) >= MAX_ARGS) { \
+ fprintf (stderr, "%s: %d: internal error: exceeded MAX_ARGS (%zu) when constructing the command line\n", __FILE__, __LINE__, (size_t) MAX_ARGS); \
+ abort (); \
+ } \
+ (argv)[(i)++] = (v); \
+ } while (0)
+
/* Helper for functions that need a root filesystem mounted.
* NB. Cannot be used for FileIn functions.
*/