Rather than considering this result as meaning "unknown", report LONG_MAX.
This won't change what superusers can set max_stack_depth to, but it will
cause InitializeGUCOptions() to set the built-in default to 2MB not 100kB.
The latter seems like a fairly unreasonable interpretation of "infinity".
Per my investigation of odd buildfarm results as well as an old complaint
from Heikki.
Since this should persuade all the buildfarm animals to use a reasonable
stack depth setting during "make check", revert previous patch that dumbed
down a recursive regression test to only 5 levels.
 
 #include "postgres.h"
 
+#include <fcntl.h>
+#include <limits.h>
+#include <signal.h>
 #include <time.h>
 #include <unistd.h>
-#include <signal.h>
-#include <fcntl.h>
 #include <sys/socket.h>
 #ifdef HAVE_SYS_SELECT_H
 #include <sys/select.h>
 /*
  * Obtain platform stack depth limit (in bytes)
  *
- * Return -1 if unlimited or not known
+ * Return -1 if unknown
  */
 long
 get_stack_depth_rlimit(void)
        if (getrlimit(RLIMIT_STACK, &rlim) < 0)
            val = -1;
        else if (rlim.rlim_cur == RLIM_INFINITY)
-           val = -1;
+           val = LONG_MAX;
+       /* rlim_cur is probably of an unsigned type, so check for overflow */
+       else if (rlim.rlim_cur >= LONG_MAX)
+           val = LONG_MAX;
        else
            val = rlim.rlim_cur;
    }
 
    stack_rlimit = get_stack_depth_rlimit();
    if (stack_rlimit > 0)
    {
-       int         new_limit = (stack_rlimit - STACK_DEPTH_SLOP) / 1024L;
+       long        new_limit = (stack_rlimit - STACK_DEPTH_SLOP) / 1024L;
 
        if (new_limit > 100)
        {
            char        limbuf[16];
 
            new_limit = Min(new_limit, 2048);
-           sprintf(limbuf, "%d", new_limit);
+           sprintf(limbuf, "%ld", new_limit);
            SetConfigOption("max_stack_depth", limbuf,
                            PGC_POSTMASTER, PGC_S_ENV_VAR);
        }
 
 -- "limit" is to prevent this from being inlined
 create function sql_recurse(float8) returns float8 as
 $$ select recurse($1) limit 1; $$ language sql;
-select recurse(5);
+select recurse(10);
  recurse 
 ---------
        0
 
 create function sql_recurse(float8) returns float8 as
 $$ select recurse($1) limit 1; $$ language sql;
 
-select recurse(5);
+select recurse(10);
 
 create function error1(text) returns text language sql as
 $$ SELECT relname::text FROM pg_class c WHERE c.oid = $1::regclass $$;