error: incompatible type for argument
===

I'm writing a list in C.
Below is the source:

    #include <stdio.h>
    #include <stdlib.h>
    
    
    struct list {
     int value;
     struct list *next;
    };
    
    typedef struct list ls;
    
    
    
    void add (ls **head, ls **tail, int val)
    {
     ls *new, *tmp1, *tmp2;
     
     if (NULL == *head)
     {
    	new = (ls*)malloc(sizeof(ls));
    	*head = new;
    	*tail = new;
    	new->value = val;
    	new->next = NULL;
    	
    	return;
     }
     
     else
     {
    	tmp1 = *head;
    	tmp2 = tmp1->next;
    	while (tmp2 != NULL)
     	{
    		tmp1 = tmp2;
    		tmp2 = tmp1->next;
    	}
    	
    	new = (ls*)malloc(sizeof(ls));
    	new->value = val;
    	new->next = NULL;
    	*tail = new;
    	
    	return;
     }
    }
    
    
    
    void show (ls **head, ls **tail)
    {
     int i;
     ls *tmp;
     
     while (tmp->next != NULL)
     {
    	printf("%d: %d", i,  tmp->value);
    	i++;
    	tmp=tmp->next;
     }
     
     return;
    }
    
    
    
    int main (int argc, char *argv[])
    {
     ls *head;
     ls *tail;
     int n, x;
    
     head = (ls*)NULL;
     tail = (ls*)NULL;
     
     printf("\n1. add\n2. show\n3. exit\n");
     scanf("%d", &x);
     switch (x)
     {
     	case 1:
    		scanf("%d", &n);
    		add(*head, *tail, n);
     		break;
    
    	case 2:
    		show(*head, *tail);
    		break;
    
    	case 3:
    		return 0;
    
    	default:
    		break;
    }
    
     return 0;
    }

When I compile it with gcc

    gcc -o lab5.out -Wall -pedantic lab5.c

I get strange errors:

    lab5.c: In function ‘main’:
    lab5.c:84:3: error: incompatible type for argument 1 of ‘add’
    lab5.c:16:6: note: expected ‘struct ls **’ but argument is of type ‘ls’
    lab5.c:84:3: error: incompatible type for argument 2 of ‘add’
    lab5.c:16:6: note: expected ‘struct ls **’ but argument is of type ‘ls’
    lab5.c:88:3: error: incompatible type for argument 1 of ‘show’
    lab5.c:52:6: note: expected ‘struct ls **’ but argument is of type ‘ls’
    lab5.c:88:3: error: incompatible type for argument 2 of ‘show’
    lab5.c:52:6: note: expected ‘struct ls **’ but argument is of type ‘ls’

For me everything is OK...

And argument type is `ls**` and not `ls` as compiler says.

Someone see what can be wrong?

PS. I know that it's unnecessary to give `*tail` as argument and it's unused, however it will be, because I want to develop this 'program'...