Compruebe si una cadena es palíndromo en C

Tengo una pregunta sobre este código que estoy escribiendo para un ejercicio. Tengo que verificar si una cuerda es palíndromo. No puedo cambiar la declaración de la función. La función solo devuelve 1 cuando todas las letras son iguales (como "aaaa") pero si cargo la oración con otro palíndromo (como "anna") la función me devuelve 0, No puedo entender por qué está apareciendo. ¡Gracias!

char* cargar (char*);
int pali (char*);

int main()
{ 
   char*texto=NULL;
   texto=cargar(texto);
   int res=pali(texto);
   if(res==1){printf("\nPalindrome");}
   else printf("\nNot palindrome");

   return 0;
}

char* cargar (char*texto)
{
   char letra;
   int i=0;
   texto=malloc(sizeof(char));
   letra=getche();
   *(texto+i)=letra;
   while(letra!='\r'){
      i++;
      texto=realloc(texto,(i+1)*sizeof(char));
      letra=getche();
      *(texto+i)=letra;}
   *(texto+i)='\0';      
   return texto;
}

int pali (char* texto)
{
   int i;
   for(i=0;*(texto+i)!='\0';i++){
   }i--;
   if(i==0||i==1){return 1;}

   if(*texto==*(texto+i)){
      return pali(++texto);
   }
   else return 0;
}