[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [tor/master] Stop using MAX_PATH, it might not be defined
commit d916fc38b6386c59f3e405e2f3b35e1d505fd806
Author: Sebastian Hahn <sebastian@xxxxxxxxxxxxxx>
Date: Sat Mar 10 16:53:01 2012 +0100
Stop using MAX_PATH, it might not be defined
This broke compilation on Hurd
---
changes/bug5355 | 4 ++++
src/common/compat.c | 27 ++++++++++++++++++++-------
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/changes/bug5355 b/changes/bug5355
new file mode 100644
index 0000000..f850fe1
--- /dev/null
+++ b/changes/bug5355
@@ -0,0 +1,4 @@
+ o Major bugfixes:
+ - Fix a compilation issue on GNU Hurd, which doesn't have PATH_MAX. Fixes
+ bug 5355; bugfix on 0.2.3.11-alpha.
+
diff --git a/src/common/compat.c b/src/common/compat.c
index 30bde3d..ec365c3 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -1645,7 +1645,10 @@ make_path_absolute(char *fname)
return absfname;
#else
- char path[PATH_MAX+1];
+/* We use this as a starting path length. Not too large seems sane. */
+#define START_PATH_LENGTH 100
+ size_t path_length = START_PATH_LENGTH;
+ char *path = tor_malloc(path_length);
char *absfname = NULL;
tor_assert(fname);
@@ -1653,13 +1656,23 @@ make_path_absolute(char *fname)
if (fname[0] == '/') {
absfname = tor_strdup(fname);
} else {
- if (getcwd(path, PATH_MAX) != NULL) {
- tor_asprintf(&absfname, "%s/%s", path, fname);
- } else {
- /* If getcwd failed, the best we can do here is keep using the
- * relative path. (Perhaps / isn't readable by this UID/GID.) */
- absfname = tor_strdup(fname);
+ int save_errno = errno;
+ errno = 0;
+ while (getcwd(path, path_length) == NULL) {
+ if (errno == ERANGE) {
+ path_length*=2;
+ path = tor_realloc(path, path_length);
+ } else {
+ /* If getcwd failed with an error other than ERANGE, the best we can
+ * do here is keep using the relative path. (Perhaps / isn't readable
+ * by this UID/GID.) */
+ absfname = tor_strdup(fname);
+ break;
+ }
}
+ errno = save_errno;
+ tor_asprintf(&absfname, "%s/%s", path, fname);
+ tor_free(path);
}
return absfname;
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits