+++ /dev/null
-#include <is_cmd.h>
-
-#include <explode.h>
-
-#ifdef WIN32
-static int is_w32_binary(const char* cmd)
-{
- DWORD binary_type;
-
- GetBinaryType(cmd, &binary_type);
-
- if(SCS_32BIT_BINARY == binary_type || SCS_64BIT_BINARY == binary_type || SCS_64BIT_BINARY == binary_type)
- return 1;
-
- return 0;
-}
-#endif
-
-int
-is_cmd(char** path, char** builtin, const char* p)
-{
- size_t i = 0;
- size_t j = 0;
- int yes = 0;
-
- struct stat stat_buff = {0};
- char command[PATH_MAX + 1] = {0};
- char buff[PATH_MAX + 1] = {0};
-
- size_t len = strlen(p);
-
- if(!p)
- return EINVAL;
-
- while(i < len)
- {
- if(p[i] != ' ' && p[i] != '\t' && p[i] != '>')
- command[j++] = p[i];
- else
- break;
-
- i++;
- }
-
- /* check first if it's a shell buitin */
-
- if(builtin)
- {
- for(i = 0; builtin[i] != NULL; i++)
- {
- if(!strcmp(builtin[i], command))
- return 0;
- }
- }
-
- if(stat(command, &stat_buff) || !S_ISREG(stat_buff.st_mode))
- {
- if(path)
- {
- for (i = 0; path[i] != NULL; i++)
- {
- sprintf(buff,"%s/%s",path[i], command);
-
- if(!stat(buff, &stat_buff) && S_ISREG(stat_buff.st_mode))
- {
- #ifdef WIN32
- if(is_w32_binary(buff))
- yes = 1;
- break;
- #else
- if(!access(buff, X_OK))
- {
- yes = 1;
- break;
- }
- #endif
- }
- }
- }
- }
- else
- {
- #ifdef WIN32
- if(is_w32_binary(command))
- yes = 1;
- #else
- if(!access(command, X_OK))
- yes = 1;
- #endif
- }
-
- return yes ? 0 : ECMDNOTFOUND;
-}
-