Нет;то, что у вас есть, не будет выполнять требуемую работу.
Вам необходимо отделить тест для обычного файла:
ISREG(sb.st_mode)
от теста на исполняемость:
(sb.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))
Следовательно, вы можете использовать:
return (ret == 0) && ISREG(sb.st_mode) && (sb.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH));
Вы могли бы разумно предпочесть разделить его:
if (ret != 0)
return 0;
if (!ISREG(sb.st_mode))
return 0;
return (sb.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH));