Bei dem Programm dupmerge, von https://sourceforge.net/projects/dupmerge/files/, habe ich seit kurzem das Problem, das strndup() nicht mehr genügend Speicher bekommt und Null-Pointer zurückgibt.

Das tritt auf an der Stelle, an der die Dateinamen in Datenfelder eingelesen werden:

Code:
    if ((NULL == (names[i] = strndup (buf, BUFSIZ))) or (NULL == (a_names[i] = strndup (buf, BUFSIZ))))
    {                         
      (void) fprintf (stderr, "%s: Out of memory, ((NULL == (names[i] = strndup (buf, BUFSIZ))) or (NULL == (a_names[i] = strndup (buf, BUFSIZ))))\n", argv[0]);
      (void) fprintf (stderr, "  i=%d, j=%d, names[i]=%p, a_names[i]=%p\n", i, j, names[i], a_names[i]);
      exit (1);
    }
Das zeigt:

dupmerge: Out of memory, ((NULL == (names[i] = strndup (buf, BUFSIZ))) or (NULL == (a_names[i] = strndup (buf, BUFSIZ))))
i=29909, j=35, names[i]=(nil), a_names[i]=(nil)

Also bei circa 1 MB ist plötzlich Schluß.
Woran liegt das und wie bekomme ich das Limit wieder weg?
ulimits zeigt mir "unlimited", also keine expliziten Limits.