execvp - ls: fts_open: Nenhum arquivo ou diretório

Atualmente estou lutando com esse erro. Eu estou escrevendo um emulador de shell, usando fork () para executar um comando usando execvp ();. Quase todos os comandos que tento analisar na minha shell estão funcionando perfeitamente, exceto por ls sem argumentos. Se eu tentar executar ls -lah, tudo funciona, mas um simples ls não, recebendo o seguinte erro:

ls: fts_open: No such file or directory

Aqui está um trecho do meu código: (apenas o essencial)

pid = fork();
      if (pid==0)
      {
        puts("CHILD");
        puts(args[0]);
        puts(args[1]);
        printf("%d\n", strlen(args[1]));
        args[2] = NULL;
        execvp(args[0], args);
      }
      else wait(NULL);
      puts("BACK TO PARENT");
    }

e aqui está a saída para ls:

ls
CHILD
ls

0
ls: fts_open: No such file or directory
BACK TO PARENT

como você pode ver, args [0] contém ls, args [1] está vazio, como não há argumentos, o comprimento de args [1] é 0, mas eu continuo recebendo o erro.

Alguma ideia do que poderia ser?

EDITAR:

Kudos para Jonathan Leffler por descobrir: (também, parece que é apenas um problema no Mac)

O ponto é que args [1] não é realmente vazio, então, o sistema operacional tenta abrir o arquivo '', que, obviamente, não existe e, pelo que é aparência, não pode ser criado, pois não é realmente um nome.

Então, aqui está o que eu fiz: verifique o len de args [1]. Se for 0, defina como NULL. (apenas liberar a memória não ajudou muito)

pid = fork();
      if (pid==0)
      {
        puts("CHILD");
        puts(args[0]);
        puts(args[1]);
        if (strlen(args[1]) == 0)
            args[1] = 0;
        args[2] = NULL;
        execvp(args[0], args);
      }
      else wait(NULL);
      puts("BACK TO PARENT");
    }

questionAnswers(1)

yourAnswerToTheQuestion