>buffer = (char*) malloc (sizeof(char)*lSize); тут бы if (!buffer) perror("");
все проверки всех действий сделаны, везде?
>result = fread (buffer,1,lSize,pFile);
по ману fread надо еще проверять ошибку и конец файла через feof(), ferror()
если выше в malloc() для чаров sizeof() делаем, то и тут sizeof(char) для единообразия писать надо вместо 1 :)
>if ( result != lSize) {fputs ("Reading error\n",stderr); }
по мелочи: fprintf(stderr,""); // уже идиома, не цепляет глаз и читается проще чем fputs()
+ strace(), dbg, так же обратить внимание на ключи оптимизации и т.п. а то сравнение не работающее для одиноковых чисел - вроде смахивает на убитый стек.