slidescript now processes programs using popen if no built-in found.
This commit is contained in:
parent
273382b200
commit
5ffbec0ce0
@ -28,10 +28,6 @@
|
|||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
// For tar containers
|
|
||||||
#if !defined(__APPLE__)
|
|
||||||
#include <sys/sysmacros.h>
|
|
||||||
#endif
|
|
||||||
// For file handling
|
// For file handling
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -79,6 +75,8 @@
|
|||||||
#define ENCSTEPODD 2
|
#define ENCSTEPODD 2
|
||||||
#define ENCSTEPEVEN 3
|
#define ENCSTEPEVEN 3
|
||||||
|
|
||||||
|
#define PATH "/bin/"
|
||||||
|
|
||||||
// HELP PRINTOUT
|
// HELP PRINTOUT
|
||||||
|
|
||||||
#define FUNCTION_HELP "-[Main Functions]-\n Need function information? Use: help <function> \n list:\n" \
|
#define FUNCTION_HELP "-[Main Functions]-\n Need function information? Use: help <function> \n list:\n" \
|
||||||
@ -100,7 +98,7 @@
|
|||||||
"read, " \
|
"read, " \
|
||||||
"write, " \
|
"write, " \
|
||||||
"cat, " \
|
"cat, " \
|
||||||
"exec, unset \n " \
|
"unset \n " \
|
||||||
"\n-[Variables, Pipes, and Backquoting]-\nExample:\n" \
|
"\n-[Variables, Pipes, and Backquoting]-\nExample:\n" \
|
||||||
" FORK=`isfile \"index.html\"` -> returns 1 on find\n" \
|
" FORK=`isfile \"index.html\"` -> returns 1 on find\n" \
|
||||||
" write \"port.txt\" \"8888\" -> writes '8888' to port.txt\n" \
|
" write \"port.txt\" \"8888\" -> writes '8888' to port.txt\n" \
|
||||||
|
@ -42,3 +42,4 @@ char *ss_time();
|
|||||||
void gen_random_string(char *s, const int len);
|
void gen_random_string(char *s, const int len);
|
||||||
char *remove_extension(char *string);
|
char *remove_extension(char *string);
|
||||||
int check_for_var(char *string);
|
int check_for_var(char *string);
|
||||||
|
int ss_exec(char **argv);
|
||||||
|
92
src/lexer.c
92
src/lexer.c
@ -26,6 +26,12 @@ char *process_line (char *line)
|
|||||||
char *tok_srch, *retbuf, *filebuf, *compbuf, *loopbuf;
|
char *tok_srch, *retbuf, *filebuf, *compbuf, *loopbuf;
|
||||||
//printf("%s", &line[strlen(line)-2]);
|
//printf("%s", &line[strlen(line)-2]);
|
||||||
static char pathbuf[MAXPATHLENGTH+1];
|
static char pathbuf[MAXPATHLENGTH+1];
|
||||||
|
// Needed for strncpy
|
||||||
|
static char line_save[MAXPATHLENGTH+1];
|
||||||
|
|
||||||
|
// save full line if popen is used, and no function is found
|
||||||
|
bzero(line_save, sizeof(line_save));
|
||||||
|
strcpy(line_save, line);
|
||||||
|
|
||||||
// Check to see if we're dealing with a
|
// Check to see if we're dealing with a
|
||||||
// variable (for the end if the lexer)
|
// variable (for the end if the lexer)
|
||||||
@ -437,7 +443,7 @@ char *process_line (char *line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Print directory
|
// Print directory
|
||||||
else if (strncmp("showdir", tok_srch, 7) == 0 || strncmp("ls", tok_srch, 2) == 0)
|
else if (strncmp("showdir", tok_srch, 7) == 0)
|
||||||
{
|
{
|
||||||
char *dirname;
|
char *dirname;
|
||||||
|
|
||||||
@ -1112,38 +1118,6 @@ char *process_line (char *line)
|
|||||||
return retbuf;
|
return retbuf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* system execute function */
|
|
||||||
else if (strncmp("exec", tok_srch, 4) == 0 || strncmp("~", tok_srch, 1) == 0)
|
|
||||||
{
|
|
||||||
char *cmd_line;
|
|
||||||
int return_val;
|
|
||||||
tok_srch = strtok_next ("\"");
|
|
||||||
if (tok_srch == NULL)
|
|
||||||
{
|
|
||||||
x_warn("ss:warn:exec syntax error, missing quote?");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
|
|
||||||
{
|
|
||||||
x_warn("ss:warn:exec syntax error, missing execution switch?");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strtok_next ("\"") == NULL)
|
|
||||||
{
|
|
||||||
x_warn("ss:warn:exec syntax error, missing quote?");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_line = parse_vars(tok_srch);
|
|
||||||
return_val = system(cmd_line);
|
|
||||||
if (return_val != 0)
|
|
||||||
x_warn("ss:warn:exec returned error code");
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (strncmp("search",tok_srch,6) == 0)
|
else if (strncmp("search",tok_srch,6) == 0)
|
||||||
{
|
{
|
||||||
char filename[MAX_FILENAME_BUFSIZE];
|
char filename[MAX_FILENAME_BUFSIZE];
|
||||||
@ -1495,39 +1469,39 @@ char *process_line (char *line)
|
|||||||
// Set variables if needed.
|
// Set variables if needed.
|
||||||
else if (strcmp(tok_srch, "\n") != 0 && strcmp(tok_srch, "") != 0)
|
else if (strcmp(tok_srch, "\n") != 0 && strcmp(tok_srch, "") != 0)
|
||||||
{
|
{
|
||||||
if (tok_srch[strlen(tok_srch)-1] == '\n')
|
if(isVar == 1)
|
||||||
{
|
{
|
||||||
return NULL;
|
int varc = get_var_count();
|
||||||
|
char *varname_tmp = tok_srch;
|
||||||
|
char *bq_check;
|
||||||
|
tok_srch = strtok_next ("=");
|
||||||
|
|
||||||
|
// Check for back quotes, return string with backquotes processed
|
||||||
|
bq_check = strip_nl(parse_vars(parse_bq(tok_srch)));
|
||||||
|
// Don't check if variable is blank, if so let it fly!
|
||||||
|
set_var(varc, varname_tmp, bq_check);
|
||||||
|
printf("ss: var '%s' -> %s\n", varname_tmp, get_var_data(varname_tmp));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(isVar == 1)
|
FILE* p = popen(line_save, "r");
|
||||||
{
|
|
||||||
int varc = get_var_count();
|
|
||||||
char *varname_tmp = tok_srch;
|
|
||||||
char *bq_check;
|
|
||||||
tok_srch = strtok_next ("=");
|
|
||||||
|
|
||||||
// Check for back quotes, return string with backquotes processed
|
if(!p)
|
||||||
bq_check = strip_nl(parse_vars(parse_bq(tok_srch)));
|
{
|
||||||
// Don't check if variable is blank, if so let it fly!
|
printf("ss:warn:command not found: %s\n", line_save);
|
||||||
set_var(varc, varname_tmp, bq_check);
|
}
|
||||||
printf("ss: var '%s' -> %s\n", varname_tmp, get_var_data(varname_tmp));
|
else
|
||||||
}
|
{
|
||||||
else
|
char buff[1024];
|
||||||
{
|
while (fgets(buff, sizeof(buff), p)) {
|
||||||
if(tok_srch != NULL)
|
printf("%s", buff);
|
||||||
{
|
}
|
||||||
printf("ss:warn:unknown function: %s\n", tok_srch);
|
}
|
||||||
}
|
|
||||||
else
|
pclose(p);
|
||||||
{
|
|
||||||
printf("ss:warn:unknown function\n");
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
16
src/util.c
16
src/util.c
@ -159,3 +159,19 @@ int check_for_var(char *string)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Execute - Run programs found within the *nix system
|
||||||
|
int ss_exec(char **argv)
|
||||||
|
{
|
||||||
|
int exec_ret = execve(argv[0], (char **)argv, NULL);
|
||||||
|
|
||||||
|
if ((exec_ret) == -1)
|
||||||
|
{
|
||||||
|
printf("ss:warn:failed to execute program [%d]", exec_ret);
|
||||||
|
return exec_ret;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return exec_ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user