/*
 * Problema 19.* Reversão de uma sequência de inteiros de comprimento
 * arbitrário.
 * 
 * - Escreva uma função de protótipo
 * 
 *   int *leia_ints(int *N);
 * 
 *   que lê da entrada padrão um sequência de inteiros e devolve um vetor
 *   contendo esses inteiros.  A função deve colocar em *N o número de
 *   inteiros lidos.  Não imponha nenhuma restrição no número de inteiros
 *   a serem lidos.
 * 
 * - Dada uma sequência de inteiros de comprimento arbitrário, imprimir a
 *   sequência em ordem reversa.
 */ 

#include <stdio.h>
#include <stdlib.h>

int *leia_ints(int *N);

void *mallocc(size_t nbytes);
void *reallocc(void *v, size_t nbytes);
  
int main()
{
  int N, i;
  int *v;

  v = leia_ints(&N);

  for (i = N - 1; i >= 0; i--)
    printf("%d ", v[i]);

  printf("\n");

  free(v);
  return 0;
}

int *leia_ints(int *N)
{
  int *v, t = 4, i = 0, x;

  v = mallocc(t * sizeof(int));

  while (scanf("%d", &x) > 0) {
    if (i > t - 1) {
      t *= 2;
      v = reallocc(v, t * sizeof(int));
    }
    v[i++] = x;    
  }
  
  *N = i;
  return v;
}

void *mallocc(size_t nbytes)
{
  void *ptr;
  ptr = malloc(nbytes);
  if (ptr == NULL) {
    printf ("Socorro! malloc devolveu NULL!\n");
    exit(EXIT_FAILURE); /* EXIT_FAILURE: definido pelo sistema */
  }
  return ptr;
}

void *reallocc(void *v, size_t nbytes)
{
  void *ptr;
  ptr = realloc(v, nbytes);
  if (ptr == NULL) {
    printf ("Socorro! realloc devolveu NULL!\n");
    exit(EXIT_FAILURE); /* EXIT_FAILURE: definido pelo sistema */
  }
  return ptr;
}
