diff options
Diffstat (limited to 'reentr.c')
-rw-r--r-- | reentr.c | 41 |
1 files changed, 38 insertions, 3 deletions
@@ -381,6 +381,16 @@ Perl_reentrant_retry(const char *f, ...) #endif if (key == 0) { + +#ifdef HAS_GETSPNAM_R + + /* This is a #define as has no corresponding keyword */ + if (strEQ(f, "getspnam")) { + key = KEY_getspnam; + } + +#endif + } else if (key < 0) { key = -key; @@ -510,9 +520,9 @@ Perl_reentrant_retry(const char *f, ...) # endif # ifdef USE_PWENT_BUFFER - case KEY_getpwnam: - case KEY_getpwuid: - case KEY_getpwent: + case KEY_getpwnam: + case KEY_getpwuid: + case KEY_getpwent: { # ifdef PERL_REENTRANT_MAXSIZE @@ -551,6 +561,31 @@ Perl_reentrant_retry(const char *f, ...) break; # endif +# ifdef USE_SPENT_BUFFER + + case KEY_getspnam: + { + char * name; + +# ifdef PERL_REENTRANT_MAXSIZE + if (PL_reentrant_buffer->_spent_size <= + PERL_REENTRANT_MAXSIZE / 2) + +# endif + RenewDouble(PL_reentrant_buffer->_spent_buffer, + &PL_reentrant_buffer->_spent_size, char); + switch (key) { + case KEY_getspnam: + name = va_arg(ap, char *); + retptr = getspnam(name); break; + default: + SETERRNO(ERANGE, LIB_INVARG); + break; + } + } + break; + +# endif # ifdef USE_PROTOENT_BUFFER case KEY_getprotobyname: |