|
|
Index: src/argz.c |
|
|
--- src/argz.c.orig 2010-12-12 17:42:22.000000000 +0100 |
|
|
+++ src/argz.c 2010-12-12 17:43:11.000000000 +0100 |
|
|
@@ -0,0 +1,413 @@ |
|
|
+/* Functions for dealing with '\0' separated arg vectors. |
|
|
+ Copyright (C) 1995-1998, 2000-2002, 2006, 2008-2010 Free Software |
|
|
+ Foundation, Inc. |
|
|
+ This file is part of the GNU C Library. |
|
|
+ |
|
|
+ This program 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 2, or (at your option) |
|
|
+ any later version. |
|
|
+ |
|
|
+ This program 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. |
|
|
+ |
|
|
+ You should have received a copy of the GNU General Public License along |
|
|
+ with this program; if not, write to the Free Software Foundation, |
|
|
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
|
|
+ |
|
|
+#include "config.h" |
|
|
+ |
|
|
+#include "argz.h" |
|
|
+#include <errno.h> |
|
|
+#include <stdlib.h> |
|
|
+#include <string.h> |
|
|
+ |
|
|
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the |
|
|
+ last written byte. */ |
|
|
+static void * |
|
|
+argz_mempcpy (void *dest, const void *src, size_t n) |
|
|
+{ |
|
|
+ return (char *) memcpy (dest, src, n) + n; |
|
|
+} |
|
|
+ |
|
|
+/* Add BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */ |
|
|
+error_t |
|
|
+argz_append (char **argz, size_t *argz_len, const char *buf, size_t buf_len) |
|
|
+{ |
|
|
+ size_t new_argz_len = *argz_len + buf_len; |
|
|
+ char *new_argz = realloc (*argz, new_argz_len); |
|
|
+ if (new_argz) |
|
|
+ { |
|
|
+ memcpy (new_argz + *argz_len, buf, buf_len); |
|
|
+ *argz = new_argz; |
|
|
+ *argz_len = new_argz_len; |
|
|
+ return 0; |
|
|
+ } |
|
|
+ else |
|
|
+ return ENOMEM; |
|
|
+} |
|
|
+ |
|
|
+/* Add STR to the argz vector in ARGZ & ARGZ_LEN. This should be moved into |
|
|
+ argz.c in libshouldbelibc. */ |
|
|
+error_t |
|
|
+argz_add (char **argz, size_t *argz_len, const char *str) |
|
|
+{ |
|
|
+ return argz_append (argz, argz_len, str, strlen (str) + 1); |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+ |
|
|
+error_t |
|
|
+argz_add_sep (char **argz, size_t *argz_len, const char *string, int delim) |
|
|
+{ |
|
|
+ size_t nlen = strlen (string) + 1; |
|
|
+ |
|
|
+ if (nlen > 1) |
|
|
+ { |
|
|
+ const char *rp; |
|
|
+ char *wp; |
|
|
+ |
|
|
+ *argz = (char *) realloc (*argz, *argz_len + nlen); |
|
|
+ if (*argz == NULL) |
|
|
+ return ENOMEM; |
|
|
+ |
|
|
+ wp = *argz + *argz_len; |
|
|
+ rp = string; |
|
|
+ do |
|
|
+ if (*rp == delim) |
|
|
+ { |
|
|
+ if (wp > *argz && wp[-1] != '\0') |
|
|
+ *wp++ = '\0'; |
|
|
+ else |
|
|
+ --nlen; |
|
|
+ } |
|
|
+ else |
|
|
+ *wp++ = *rp; |
|
|
+ while (*rp++ != '\0'); |
|
|
+ |
|
|
+ *argz_len += nlen; |
|
|
+ } |
|
|
+ |
|
|
+ return 0; |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+ |
|
|
+error_t |
|
|
+argz_create_sep (const char *string, int delim, char **argz, size_t *len) |
|
|
+{ |
|
|
+ size_t nlen = strlen (string) + 1; |
|
|
+ |
|
|
+ if (nlen > 1) |
|
|
+ { |
|
|
+ const char *rp; |
|
|
+ char *wp; |
|
|
+ |
|
|
+ *argz = (char *) malloc (nlen); |
|
|
+ if (*argz == NULL) |
|
|
+ return ENOMEM; |
|
|
+ |
|
|
+ rp = string; |
|
|
+ wp = *argz; |
|
|
+ do |
|
|
+ if (*rp == delim) |
|
|
+ { |
|
|
+ if (wp > *argz && wp[-1] != '\0') |
|
|
+ *wp++ = '\0'; |
|
|
+ else |
|
|
+ --nlen; |
|
|
+ } |
|
|
+ else |
|
|
+ *wp++ = *rp; |
|
|
+ while (*rp++ != '\0'); |
|
|
+ |
|
|
+ if (nlen == 0) |
|
|
+ { |
|
|
+ free (*argz); |
|
|
+ *argz = NULL; |
|
|
+ *len = 0; |
|
|
+ } |
|
|
+ |
|
|
+ *len = nlen; |
|
|
+ } |
|
|
+ else |
|
|
+ { |
|
|
+ *argz = NULL; |
|
|
+ *len = 0; |
|
|
+ } |
|
|
+ |
|
|
+ return 0; |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an |
|
|
+ existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end. |
|
|
+ Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN, |
|
|
+ ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not |
|
|
+ in ARGZ, EINVAL is returned, else if memory can't be allocated for the new |
|
|
+ ARGZ, ENOMEM is returned, else 0. */ |
|
|
+error_t |
|
|
+argz_insert (char **argz, size_t *argz_len, char *before, const char *entry) |
|
|
+{ |
|
|
+ if (! before) |
|
|
+ return argz_add (argz, argz_len, entry); |
|
|
+ |
|
|
+ if (before < *argz || before >= *argz + *argz_len) |
|
|
+ return EINVAL; |
|
|
+ |
|
|
+ if (before > *argz) |
|
|
+ /* Make sure before is actually the beginning of an entry. */ |
|
|
+ while (before[-1]) |
|
|
+ before--; |
|
|
+ |
|
|
+ { |
|
|
+ size_t after_before = *argz_len - (before - *argz); |
|
|
+ size_t entry_len = strlen (entry) + 1; |
|
|
+ size_t new_argz_len = *argz_len + entry_len; |
|
|
+ char *new_argz = realloc (*argz, new_argz_len); |
|
|
+ |
|
|
+ if (new_argz) |
|
|
+ { |
|
|
+ before = new_argz + (before - *argz); |
|
|
+ memmove (before + entry_len, before, after_before); |
|
|
+ memmove (before, entry, entry_len); |
|
|
+ *argz = new_argz; |
|
|
+ *argz_len = new_argz_len; |
|
|
+ return 0; |
|
|
+ } |
|
|
+ else |
|
|
+ return ENOMEM; |
|
|
+ } |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+char * |
|
|
+argz_next (const char *argz, size_t argz_len, const char *entry) |
|
|
+{ |
|
|
+ if (entry) |
|
|
+ { |
|
|
+ if (entry < argz + argz_len) |
|
|
+ entry = strchr (entry, '\0') + 1; |
|
|
+ |
|
|
+ return entry >= argz + argz_len ? NULL : (char *) entry; |
|
|
+ } |
|
|
+ else |
|
|
+ if (argz_len > 0) |
|
|
+ return (char *) argz; |
|
|
+ else |
|
|
+ return NULL; |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's |
|
|
+ except the last into the character SEP. */ |
|
|
+void |
|
|
+argz_stringify (char *argz, size_t len, int sep) |
|
|
+{ |
|
|
+ if (len > 0) |
|
|
+ while (1) |
|
|
+ { |
|
|
+ size_t part_len = strnlen (argz, len); |
|
|
+ argz += part_len; |
|
|
+ len -= part_len; |
|
|
+ if (len-- <= 1) /* includes final '\0' we want to stop at */ |
|
|
+ break; |
|
|
+ *argz++ = sep; |
|
|
+ } |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+/* Returns the number of strings in ARGZ. */ |
|
|
+size_t |
|
|
+argz_count (const char *argz, size_t len) |
|
|
+{ |
|
|
+ size_t count = 0; |
|
|
+ while (len > 0) |
|
|
+ { |
|
|
+ size_t part_len = strlen (argz); |
|
|
+ argz += part_len + 1; |
|
|
+ len -= part_len + 1; |
|
|
+ count++; |
|
|
+ } |
|
|
+ return count; |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+/* Puts pointers to each string in ARGZ, plus a terminating 0 element, into |
|
|
+ ARGV, which must be large enough to hold them all. */ |
|
|
+void |
|
|
+argz_extract (const char *argz, size_t len, char **argv) |
|
|
+{ |
|
|
+ while (len > 0) |
|
|
+ { |
|
|
+ size_t part_len = strlen (argz); |
|
|
+ *argv++ = (char *) argz; |
|
|
+ argz += part_len + 1; |
|
|
+ len -= part_len + 1; |
|
|
+ } |
|
|
+ *argv = 0; |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+/* Make a '\0' separated arg vector from a unix argv vector, returning it in |
|
|
+ ARGZ, and the total length in LEN. If a memory allocation error occurs, |
|
|
+ ENOMEM is returned, otherwise 0. */ |
|
|
+error_t |
|
|
+argz_create (char *const argv[], char **argz, size_t *len) |
|
|
+{ |
|
|
+ int argc; |
|
|
+ size_t tlen = 0; |
|
|
+ char *const *ap; |
|
|
+ char *p; |
|
|
+ |
|
|
+ for (argc = 0; argv[argc] != NULL; ++argc) |
|
|
+ tlen += strlen (argv[argc]) + 1; |
|
|
+ |
|
|
+ if (tlen == 0) |
|
|
+ *argz = NULL; |
|
|
+ else |
|
|
+ { |
|
|
+ *argz = malloc (tlen); |
|
|
+ if (*argz == NULL) |
|
|
+ return ENOMEM; |
|
|
+ |
|
|
+ for (p = *argz, ap = argv; *ap; ++ap, ++p) |
|
|
+ p = stpcpy (p, *ap); |
|
|
+ } |
|
|
+ *len = tlen; |
|
|
+ |
|
|
+ return 0; |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+/* Delete ENTRY from ARGZ & ARGZ_LEN, if any. */ |
|
|
+void |
|
|
+argz_delete (char **argz, size_t *argz_len, char *entry) |
|
|
+{ |
|
|
+ if (entry) |
|
|
+ /* Get rid of the old value for NAME. */ |
|
|
+ { |
|
|
+ size_t entry_len = strlen (entry) + 1; |
|
|
+ *argz_len -= entry_len; |
|
|
+ memmove (entry, entry + entry_len, *argz_len - (entry - *argz)); |
|
|
+ if (*argz_len == 0) |
|
|
+ { |
|
|
+ free (*argz); |
|
|
+ *argz = 0; |
|
|
+ } |
|
|
+ } |
|
|
+} |
|
|
+ |
|
|
+ |
|
|
+/* Append BUF, of length BUF_LEN to *TO, of length *TO_LEN, reallocating and |
|
|
+ updating *TO & *TO_LEN appropriately. If an allocation error occurs, |
|
|
+ *TO's old value is freed, and *TO is set to 0. */ |
|
|
+static void |
|
|
+str_append (char **to, size_t *to_len, const char *buf, const size_t buf_len) |
|
|
+{ |
|
|
+ size_t new_len = *to_len + buf_len; |
|
|
+ char *new_to = realloc (*to, new_len + 1); |
|
|
+ |
|
|
+ if (new_to) |
|
|
+ { |
|
|
+ *((char *) argz_mempcpy (new_to + *to_len, buf, buf_len)) = '\0'; |
|
|
+ *to = new_to; |
|
|
+ *to_len = new_len; |
|
|
+ } |
|
|
+ else |
|
|
+ { |
|
|
+ free (*to); |
|
|
+ *to = 0; |
|
|
+ } |
|
|
+} |
|
|
+ |
|
|
+/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating |
|
|
+ ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be |
|
|
+ incremented by number of replacements performed. */ |
|
|
+error_t |
|
|
+argz_replace (char **argz, size_t *argz_len, const char *str, const char *with, |
|
|
+ unsigned *replace_count) |
|
|
+{ |
|
|
+ error_t err = 0; |
|
|
+ |
|
|
+ if (str && *str) |
|
|
+ { |
|
|
+ char *arg = 0; |
|
|
+ char *src = *argz; |
|
|
+ size_t src_len = *argz_len; |
|
|
+ char *dst = 0; |
|
|
+ size_t dst_len = 0; |
|
|
+ int delayed_copy = 1; /* True while we've avoided copying anything. */ |
|
|
+ size_t str_len = strlen (str), with_len = strlen (with); |
|
|
+ |
|
|
+ while (!err && (arg = argz_next (src, src_len, arg))) |
|
|
+ { |
|
|
+ char *match = strstr (arg, str); |
|
|
+ if (match) |
|
|
+ { |
|
|
+ char *from = match + str_len; |
|
|
+ size_t to_len = match - arg; |
|
|
+ char *to = strndup (arg, to_len); |
|
|
+ |
|
|
+ while (to && from) |
|
|
+ { |
|
|
+ str_append (&to, &to_len, with, with_len); |
|
|
+ if (to) |
|
|
+ { |
|
|
+ match = strstr (from, str); |
|
|
+ if (match) |
|
|
+ { |
|
|
+ str_append (&to, &to_len, from, match - from); |
|
|
+ from = match + str_len; |
|
|
+ } |
|
|
+ else |
|
|
+ { |
|
|
+ str_append (&to, &to_len, from, strlen (from)); |
|
|
+ from = 0; |
|
|
+ } |
|
|
+ } |
|
|
+ } |
|
|
+ |
|
|
+ if (to) |
|
|
+ { |
|
|
+ if (delayed_copy) |
|
|
+ /* We avoided copying SRC to DST until we found a match; |
|
|
+ now that we've done so, copy everything from the start |
|
|
+ of SRC. */ |
|
|
+ { |
|
|
+ if (arg > src) |
|
|
+ err = argz_append (&dst, &dst_len, src, (arg - src)); |
|
|
+ delayed_copy = 0; |
|
|
+ } |
|
|
+ if (! err) |
|
|
+ err = argz_add (&dst, &dst_len, to); |
|
|
+ free (to); |
|
|
+ } |
|
|
+ else |
|
|
+ err = ENOMEM; |
|
|
+ |
|
|
+ if (replace_count) |
|
|
+ (*replace_count)++; |
|
|
+ } |
|
|
+ else if (! delayed_copy) |
|
|
+ err = argz_add (&dst, &dst_len, arg); |
|
|
+ } |
|
|
+ |
|
|
+ if (! err) |
|
|
+ { |
|
|
+ if (! delayed_copy) |
|
|
+ /* We never found any instances of str. */ |
|
|
+ { |
|
|
+ free (src); |
|
|
+ *argz = dst; |
|
|
+ *argz_len = dst_len; |
|
|
+ } |
|
|
+ } |
|
|
+ else if (dst_len > 0) |
|
|
+ free (dst); |
|
|
+ } |
|
|
+ |
|
|
+ return err; |
|
|
+} |
|
|
Index: src/argz.h |
|
|
--- src/argz.h.orig 2010-12-12 17:42:22.000000000 +0100 |
|
|
+++ src/argz.h 2010-12-12 17:42:22.000000000 +0100 |
|
|
@@ -0,0 +1,136 @@ |
|
|
+/* Routines for dealing with '\0' separated arg vectors. |
|
|
+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2004, 2007, 2009, 2010 |
|
|
+ Free Software Foundation, Inc. |
|
|
+ This file is part of the GNU C Library. |
|
|
+ |
|
|
+ This program 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 of the License, or |
|
|
+ (at your option) any later version. |
|
|
+ |
|
|
+ This program 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. |
|
|
+ |
|
|
+ You should have received a copy of the GNU General Public License |
|
|
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
|
|
+ |
|
|
+#ifndef _ARGZ_H |
|
|
+#define _ARGZ_H 1 |
|
|
+ |
|
|
+ |
|
|
+#define __need_error_t |
|
|
+#include <errno.h> |
|
|
+#include <string.h> /* Need size_t, and strchr is called below. */ |
|
|
+ |
|
|
+#ifndef const |
|
|
+# define const const |
|
|
+#endif |
|
|
+ |
|
|
+#ifndef __error_t_defined |
|
|
+typedef int error_t; |
|
|
+#endif |
|
|
+ |
|
|
+ |
|
|
+ |
|
|
+/* Make a '\0' separated arg vector from a unix argv vector, returning it in |
|
|
+ ARGZ, and the total length in LEN. If a memory allocation error occurs, |
|
|
+ ENOMEM is returned, otherwise 0. The result can be destroyed using free. */ |
|
|
+ |
|
|
+extern error_t argz_create (char *const __argv[], char **restrict __argz, |
|
|
+ size_t *restrict __len); |
|
|
+ |
|
|
+/* Make a '\0' separated arg vector from a SEP separated list in |
|
|
+ STRING, returning it in ARGZ, and the total length in LEN. If a |
|
|
+ memory allocation error occurs, ENOMEM is returned, otherwise 0. |
|
|
+ The result can be destroyed using free. */ |
|
|
+ |
|
|
+extern error_t argz_create_sep (const char *restrict string, |
|
|
+ int __sep, char **restrict __argz, |
|
|
+ size_t *restrict __len); |
|
|
+ |
|
|
+/* Returns the number of strings in ARGZ. */ |
|
|
+ |
|
|
+extern size_t argz_count (const char *__argz, size_t __len) |
|
|
+; |
|
|
+ |
|
|
+/* Puts pointers to each string in ARGZ into ARGV, which must be large enough |
|
|
+ to hold them all. */ |
|
|
+ |
|
|
+extern void argz_extract (const char *restrict __argz, size_t __len, |
|
|
+ char **restrict __argv); |
|
|
+ |
|
|
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's |
|
|
+ except the last into the character SEP. */ |
|
|
+ |
|
|
+extern void argz_stringify (char *__argz, size_t __len, int __sep); |
|
|
+ |
|
|
+/* Append BUF, of length BUF_LEN to the argz vector in ARGZ & ARGZ_LEN. */ |
|
|
+ |
|
|
+extern error_t argz_append (char **restrict __argz, |
|
|
+ size_t *restrict __argz_len, |
|
|
+ const char *restrict __buf, size_t __buf_len) |
|
|
+; |
|
|
+ |
|
|
+/* Append STR to the argz vector in ARGZ & ARGZ_LEN. */ |
|
|
+ |
|
|
+extern error_t argz_add (char **restrict __argz, |
|
|
+ size_t *restrict __argz_len, |
|
|
+ const char *restrict str); |
|
|
+ |
|
|
+/* Append SEP separated list in STRING to the argz vector in ARGZ & |
|
|
+ ARGZ_LEN. */ |
|
|
+ |
|
|
+extern error_t argz_add_sep (char **restrict __argz, |
|
|
+ size_t *restrict __argz_len, |
|
|
+ const char *restrict string, int __delim) |
|
|
+; |
|
|
+ |
|
|
+/* Delete ENTRY from ARGZ & ARGZ_LEN, if it appears there. */ |
|
|
+ |
|
|
+extern void argz_delete (char **restrict __argz, |
|
|
+ size_t *restrict __argz_len, |
|
|
+ char *restrict __entry); |
|
|
+ |
|
|
+/* Insert ENTRY into ARGZ & ARGZ_LEN before BEFORE, which should be an |
|
|
+ existing entry in ARGZ; if BEFORE is NULL, ENTRY is appended to the end. |
|
|
+ Since ARGZ's first entry is the same as ARGZ, argz_insert (ARGZ, ARGZ_LEN, |
|
|
+ ARGZ, ENTRY) will insert ENTRY at the beginning of ARGZ. If BEFORE is not |
|
|
+ in ARGZ, EINVAL is returned, else if memory can't be allocated for the new |
|
|
+ ARGZ, ENOMEM is returned, else 0. */ |
|
|
+ |
|
|
+extern error_t argz_insert (char **restrict __argz, |
|
|
+ size_t *restrict __argz_len, |
|
|
+ char *restrict __before, |
|
|
+ const char *restrict __entry); |
|
|
+ |
|
|
+/* Replace any occurrences of the string STR in ARGZ with WITH, reallocating |
|
|
+ ARGZ as necessary. If REPLACE_COUNT is non-zero, *REPLACE_COUNT will be |
|
|
+ incremented by number of replacements performed. */ |
|
|
+ |
|
|
+extern error_t argz_replace (char **restrict __argz, |
|
|
+ size_t *restrict __argz_len, |
|
|
+ const char *restrict str, |
|
|
+ const char *restrict __with, |
|
|
+ unsigned int *restrict __replace_count); |
|
|
+ |
|
|
+/* Returns the next entry in ARGZ & ARGZ_LEN after ENTRY, or NULL if there |
|
|
+ are no more. If entry is NULL, then the first entry is returned. This |
|
|
+ behavior allows two convenient iteration styles: |
|
|
+ |
|
|
+ char *entry = 0; |
|
|
+ while ((entry = argz_next (argz, argz_len, entry))) |
|
|
+ ...; |
|
|
+ |
|
|
+ or |
|
|
+ |
|
|
+ char *entry; |
|
|
+ for (entry = argz; entry; entry = argz_next (argz, argz_len, entry)) |
|
|
+ ...; |
|
|
+*/ |
|
|
+ |
|
|
+extern char *argz_next (const char *restrict __argz, size_t __argz_len, |
|
|
+ const char *restrict __entry); |
|
|
+ |
|
|
+#endif /* argz.h */ |
|
|
Index: src/filelist.c |
|
|
--- src/filelist.c.orig 2008-01-12 14:37:52.000000000 +0100 |
|
|
+++ src/filelist.c 2010-12-12 17:42:22.000000000 +0100 |
|
|
@@ -28,7 +28,7 @@ |
|
|
#include <libgen.h> |
|
|
#include <unistd.h> |
|
|
#include "filelist.h" |
|
|
-#include <argz.h> |
|
|
+#include "argz.h" |
|
|
#include "node.h" |
|
|
#include "list.h" |
|
|
#include "listdirs.h" |
|
|
Index: src/handlers.c |
|
|
--- src/handlers.c.orig 2008-01-12 14:37:52.000000000 +0100 |
|
|
+++ src/handlers.c 2010-12-12 17:42:22.000000000 +0100 |
|
|
@@ -26,6 +26,9 @@ |
|
|
#include "node.h" |
|
|
#include "wl.h" |
|
|
#include "xvasprintf.h" |
|
|
+#if defined(__FreeBSD__) |
|
|
+#include "libgen.h" |
|
|
+#endif |
|
|
|
|
|
/* |
|
|
* handlers.c |
|
|
Index: src/main.c |
|
|
--- src/main.c.orig 2008-01-12 14:37:52.000000000 +0100 |
|
|
+++ src/main.c 2010-12-12 17:44:07.000000000 +0100 |
|
|
@@ -25,7 +25,8 @@ |
|
|
#include <stdlib.h> |
|
|
#include <signal.h> |
|
|
#include "fileschanged.h" |
|
|
-#include <argz.h> |
|
|
+#include "argz.h" |
|
|
+#include "argz.c" |
|
|
#include <error.h> |
|
|
#include <locale.h> |
|
|
#include "opts.h" |
|
|
@@ -33,6 +34,8 @@ |
|
|
#include <sys/stat.h> |
|
|
extern struct arguments_t arguments; |
|
|
|
|
|
+char *program_name = "fileschanged"; |
|
|
+ |
|
|
struct action_to_code_assoc_t |
|
|
{ |
|
|
enum fileschanged_action_enum_t id; |
|
|
Index: src/monitor.c |
|
|
--- src/monitor.c.orig 2008-01-12 14:37:52.000000000 +0100 |
|
|
+++ src/monitor.c 2010-12-12 17:42:22.000000000 +0100 |
|
|
@@ -21,7 +21,9 @@ |
|
|
#include <stdio.h> |
|
|
#include <string.h> |
|
|
#include <stdlib.h> |
|
|
+#if !defined(__FreeBSD__) |
|
|
#include <sys/select.h> |
|
|
+#endif |
|
|
#include <sys/types.h> |
|
|
#include <sys/stat.h> |
|
|
#include <time.h> |
|
|
Index: src/wl.c |
|
|
--- src/wl.c.orig 2008-01-12 14:37:52.000000000 +0100 |
|
|
+++ src/wl.c 2010-12-12 17:42:22.000000000 +0100 |
|
|
@@ -24,7 +24,7 @@ |
|
|
#include <sys/stat.h> |
|
|
#include <unistd.h> |
|
|
#include <time.h> |
|
|
-#include <argz.h> |
|
|
+#include "argz.h" |
|
|
#include "wl_priv.h" |
|
|
#include "fileschanged_priv.h" |
|
|
|
|
|
Index: src/Makefile.in |
|
|
--- src/Makefile.in.orig 2008-09-06 03:42:04.000000000 +0200 |
|
|
+++ src/Makefile.in 2012-06-10 20:00:36.000000000 +0200 |
|
|
@@ -481,7 +481,7 @@ |
|
|
fileschanged.h |
|
|
|
|
|
fileschanged_LDADD = @LIBINTL@ ../gnulib/lib/libgnu.a |
|
|
-AM_CFLAGS = -Wall -Werror |
|
|
+AM_CFLAGS = |
|
|
all: all-am |
|
|
|
|
|
.SUFFIXES:
|
|
|
|