~vcs-imports/grub/grub2-bzr

« back to all changes in this revision

Viewing changes to grub-core/gnulib/alloca.c

  • Committer: Vladimir 'phcoder' Serbinenko
  • Date: 2013-04-11 19:12:46 UTC
  • Revision ID: phcoder@gmail.com-20130411191246-fz1xdy47z3vv2kt8
        Import new gnulib.

Show diffs side-by-side

added added

removed removed

Lines of Context:
93
93
static int stack_dir;           /* 1 or -1 once known.  */
94
94
#   define STACK_DIR    stack_dir
95
95
 
96
 
static void
97
 
find_stack_direction (void)
 
96
static int
 
97
find_stack_direction (int *addr, int depth)
98
98
{
99
 
  static char *addr = NULL;     /* Address of first `dummy', once known.  */
100
 
  auto char dummy;              /* To get stack address.  */
101
 
 
102
 
  if (addr == NULL)
103
 
    {                           /* Initial entry.  */
104
 
      addr = ADDRESS_FUNCTION (dummy);
105
 
 
106
 
      find_stack_direction ();  /* Recurse once.  */
107
 
    }
108
 
  else
109
 
    {
110
 
      /* Second entry.  */
111
 
      if (ADDRESS_FUNCTION (dummy) > addr)
112
 
        stack_dir = 1;          /* Stack grew upward.  */
113
 
      else
114
 
        stack_dir = -1;         /* Stack grew downward.  */
115
 
    }
 
99
  int dir, dummy = 0;
 
100
  if (! addr)
 
101
    addr = &dummy;
 
102
  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
 
103
  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
 
104
  return dir + dummy;
116
105
}
117
106
 
118
107
#  endif /* STACK_DIRECTION == 0 */
155
144
 
156
145
#  if STACK_DIRECTION == 0
157
146
  if (STACK_DIR == 0)           /* Unknown growth direction.  */
158
 
    find_stack_direction ();
 
147
    STACK_DIR = find_stack_direction (NULL, (size & 1) + 20);
159
148
#  endif
160
149
 
161
150
  /* Reclaim garbage, defined as all alloca'd storage that
486
475
#  endif /* CRAY */
487
476
 
488
477
# endif /* no alloca */
489
 
#endif /* not GCC version 3 */
 
478
#endif /* not GCC 2 */