-/* Copyright (C) 1992, 93, 94, 95, 96, 97, 99 Free Software Foundation, Inc.
+/* Copyright (C) 1992,93,94,95,96,97,99,2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
lookup = __dir_lookup;
nloops = 0;
+#define CHECK_ELOOP do { \
+ if (++nloops > SYMLOOP_MAX) \
+ { \
+ if (*result != MACH_PORT_NULL) \
+ __mach_port_deallocate (__mach_task_self (), *result); \
+ return ELOOP; \
+ } \
+ } while (0)
+
err = 0;
do
{
/* Fall through. */
case FS_RETRY_NORMAL:
-#ifdef SYMLOOP_MAX
- if (nloops++ >= SYMLOOP_MAX)
- return ELOOP;
-#endif
-
/* An empty RETRYNAME indicates we have the final port. */
if (retryname[0] == '\0' &&
/* If reauth'd, we must do one more retry on "" to give the new
return err;
}
+ CHECK_ELOOP;
+
startdir = *result;
file_name = retryname;
break;
switch (retryname[0])
{
case '/':
+ CHECK_ELOOP;
dirport = INIT_PORT_CRDIR;
if (*result != MACH_PORT_NULL)
__mach_port_deallocate (__mach_task_self (), *result);
else
{
/* Do a normal retry on the remaining components. */
+ CHECK_ELOOP;
startdir = *result;
file_name = end + 1; /* Skip the slash. */
break;
abort (); /* XXX write this right if this ever happens */
if (p > retryname)
strcpy (retryname, p);
+ CHECK_ELOOP;
startdir = *result;
}
else
case '/':
if (err = opentty (&startdir))
return err;
+ CHECK_ELOOP;
strcpy (retryname, &retryname[4]);
break;
default: