Blame stdlib/tst-qsort.c

Packit 6c4009
/* Test case by Paul Eggert <eggert@twinsun.com> */
Packit 6c4009
#include <stdio.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
#include <tst-stack-align.h>
Packit 6c4009
Packit 6c4009
struct big { char c[4 * 1024]; };
Packit 6c4009
Packit 6c4009
struct big *array;
Packit 6c4009
struct big *array_end;
Packit 6c4009
Packit 6c4009
static int align_check;
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
compare (void const *a1, void const *b1)
Packit 6c4009
{
Packit 6c4009
  struct big const *a = a1;
Packit 6c4009
  struct big const *b = b1;
Packit 6c4009
Packit 6c4009
  if (!align_check)
Packit 6c4009
    align_check = TEST_STACK_ALIGN () ? -1 : 1;
Packit 6c4009
Packit 6c4009
  if (! (array <= a && a < array_end
Packit 6c4009
	 && array <= b && b < array_end))
Packit 6c4009
    {
Packit 6c4009
      exit (EXIT_FAILURE);
Packit 6c4009
    }
Packit 6c4009
  return b->c[0] - a->c[0];
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
int
Packit 6c4009
main (int argc, char **argv)
Packit 6c4009
{
Packit 6c4009
  size_t i;
Packit 6c4009
  size_t array_members = argv[1] ? atoi (argv[1]) : 50;
Packit 6c4009
  array = (struct big *) malloc (array_members * sizeof *array);
Packit 6c4009
  if (array == NULL)
Packit 6c4009
    {
Packit 6c4009
      puts ("no memory");
Packit 6c4009
      exit (EXIT_FAILURE);
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  array_end = array + array_members;
Packit 6c4009
  for (i = 0; i < array_members; i++)
Packit 6c4009
    array[i].c[0] = i % 128;
Packit 6c4009
Packit 6c4009
  qsort (array, array_members, sizeof *array, compare);
Packit 6c4009
Packit 6c4009
  if (align_check == -1)
Packit 6c4009
    {
Packit 6c4009
      puts ("stack not sufficiently aligned");
Packit 6c4009
      exit (EXIT_FAILURE);
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  return 0;
Packit 6c4009
}