Bug#346447: gopher: FTBFS on hurd
X-Debbugs-Cc: debian-hurd@lists.debian.org
Hello John,
On Sat, Apr 19, 2025 at 11:20:11PM -0500, John Goerzen wrote:
> Every reference I have seen says it's not part of POSIX. However, Linux
> and the BSDs seem to support it, so might as well just assume it will
> work. If you have a patch to just go that direction, I'll take it.
Please see attached my second attempt at patching gopher.
Best regards,
João
diff -ruNd gopher-3.0.17.4/gopher/download.c gopher-3.0.17.4_mod/gopher/download.c
--- gopher-3.0.17.4/gopher/download.c 2025-04-24 16:28:29.100204200 +0200
+++ gopher-3.0.17.4_mod/gopher/download.c 2025-04-24 16:13:30.507748321 +0200
@@ -198,14 +198,6 @@
int start, end;
struct stat buf;
-#if defined(HAVE_GETCWD) && !defined(HAVE_GET_CURRENT_DIR_NAME)
- curcwd = (char *) malloc(MAXPATHLEN + 2);
- if (!curcwd) {
- CursesErrorMsg("Out of memory.");
- return;
- }
-#endif
-
switch (GSgetType(gs)) {
case A_DIRECTORY:
case A_CSO:
@@ -256,14 +248,20 @@
}
#ifdef HAVE_GETCWD
- getcwd(curcwd, MAXPATHLEN);
+ curcwd = getcwd(NULL, 0);
#else
#ifdef HAVE_GET_CURRENT_DIR_NAME
- curcwd = get_current_dir_name();
+ curcwd = get_current_dir_name();
#else
+ curcwd = (char *) malloc(MAXPATHLEN + 2);
+ if (!curcwd) {
+ CursesErrorMsg("Out of memory.");
+ return;
+ }
+
getwd(curcwd);
-#endif
-#endif /* HAVE_GET_CURRENT_DIR_NAME */
+#endif /* HAVE_GET_CURRENT_DIR_NAME */
+#endif
#ifdef VMS
if (chdir("SYS$SCRATCH")!=0) {
@@ -343,9 +341,7 @@
fflush(stdout);
getchar();
CURenter(CursesScreen);
-#if defined(HAVE_GETCWD) || !defined(HAVE_GET_CURRENT_DIR_NAME)
free(curcwd);
-#endif
}
@@ -363,15 +359,6 @@
char *tmppath;
GopherObj *gs;
-
-#if defined(HAVE_GETCWD) && !defined(HAVE_GET_CURRENT_DIR_NAME)
- tmppath = (char*)malloc(MAXPATHLEN * 3 + 2);
- if ( !tmppath ) {
- CursesErrorMsg("Cannot allocate memory");
- return;
- }
-#endif
-
thedir = opendir(dirname);
chdir(dirname);
@@ -400,22 +387,32 @@
GSplusnew(gs);
GSsetPath(gs, names[choice]);
-
+
#ifdef HAVE_GETCWD
- getcwd(tmppath,MAXPATHLEN);
+ tmppath = getcwd(NULL, 0);
#else
#ifdef HAVE_GET_CURRENT_DIR_NAME
- tmppath = get_current_dir_name();
- if ( sizeof(tmppath) <= (strlen(tmppath) + strlen(names[choice]) + 1) )
- tmppath = realloc(tmppath,sizeof(tmppath) + strlen(names[choice] + 1));
+ tmppath = get_current_dir_name();
+#else
+ tmppath = (char*)malloc(MAXPATHLEN * 3 + 2);
if ( !tmppath ) {
- CursesErrorMsg("Out of memory");
- return;
+ CursesErrorMsg("Cannot allocate memory");
+ return;
}
-#else
+
getwd(tmppath);
#endif
-#endif
+#endif
+
+#if defined(HAVE_GETCWD) || defined(HAVE_GET_CURRENT_DIR_NAME)
+ if ( sizeof(tmppath) <= (strlen(tmppath) + strlen(names[choice]) + 1) )
+ tmppath = realloc(tmppath,sizeof(tmppath) + strlen(names[choice] + 1));
+ if ( !tmppath ) {
+ CursesErrorMsg("Out of memory");
+ return;
+ }
+#endif
+
strcat(tmppath, "/");
strcat(tmppath, names[choice]);
@@ -429,9 +426,8 @@
for (fcount = 0; names[fcount] != NULL;) {
free(names[fcount++]);
}
-#if defined(HAVE_GETCWD) || !defined(HAVE_GET_CURRENT_DIR_NAME)
+
free(tmppath);
-#endif
}
#else
void
Reply to: