Cleaned up source, fixed a couple more segfaults
This commit is contained in:
parent
1a3727f451
commit
8356d6de8a
6
Makefile
6
Makefile
@ -7,13 +7,13 @@ VERSION_EXTRA = \"$(EXTRA)\"
|
||||
|
||||
PREFIX ?= /usr
|
||||
|
||||
CC ?= cc
|
||||
CFLAGS += -O2 -ansi -pedantic -g -Wall -Wextra --param=ssp-buffer-size=2 -fstack-protector-all
|
||||
CC ?= gcc
|
||||
CFLAGS += -O2 -pedantic -g -Wall -Wextra --param=ssp-buffer-size=2 -fstack-protector-all
|
||||
CPPFLAGS += -DVERSION=$(VERSION) -DVERSION_EXTRA=$(VERSION_EXTRA) -D_FORTIFY_SOURCE=2
|
||||
LDFLAGS += -Wl,-O1,--sort-common,--hash-style=gnu,-z,relro
|
||||
BIN ?= slidescript
|
||||
|
||||
OBJECTS = src/main.o src/functions.o src/util.o
|
||||
OBJECTS = src/main.o src/functions.o src/util.o src/vars.o src/enc.o
|
||||
|
||||
all: main
|
||||
|
||||
|
48
src/enc.c
Normal file
48
src/enc.c
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
SlideScript - minimalistic top-down scripting language.
|
||||
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
|
||||
|
||||
View README file supplied with this software for more details
|
||||
*/
|
||||
|
||||
#include "deps.h"
|
||||
#include "enc.h"
|
||||
|
||||
char *ss_encrypt(char *string)
|
||||
{
|
||||
int i;
|
||||
int str_len;
|
||||
|
||||
str_len = strlen(string);
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
|
||||
string[i] = string[i] + ENCOFFSET;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
|
||||
string[i] = string[i] - ENCSTEPODD;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
|
||||
string[i] = string[i] + ENCSTEPEVEN;
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
char *ss_decrypt(char *string)
|
||||
{
|
||||
int i;
|
||||
int str_len;
|
||||
|
||||
str_len = strlen(string);
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
|
||||
string[i] = string[i] - ENCOFFSET;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
|
||||
string[i] = string[i] + ENCSTEPODD;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
|
||||
string[i] = string[i] - ENCSTEPEVEN;
|
||||
|
||||
return string;
|
||||
}
|
||||
|
10
src/enc.h
Normal file
10
src/enc.h
Normal file
@ -0,0 +1,10 @@
|
||||
/*
|
||||
SlideScript - minimalistic top-down scripting language.
|
||||
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
|
||||
|
||||
View README file supplied with this software for more details
|
||||
*/
|
||||
|
||||
char *ss_encrypt(char *string);
|
||||
char *ss_decrypt(char *string);
|
||||
|
@ -8,48 +8,14 @@
|
||||
#include "deps.h"
|
||||
#include "functions.h"
|
||||
#include "util.h"
|
||||
|
||||
char *ss_encrypt(char *string)
|
||||
{
|
||||
int i;
|
||||
int str_len;
|
||||
|
||||
str_len = strlen(string);
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
|
||||
string[i] = string[i] + ENCOFFSET;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
|
||||
string[i] = string[i] - ENCSTEPODD;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
|
||||
string[i] = string[i] + ENCSTEPEVEN;
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
char *ss_decrypt(char *string)
|
||||
{
|
||||
int i;
|
||||
int str_len;
|
||||
|
||||
str_len = strlen(string);
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i++)
|
||||
string[i] = string[i] - ENCOFFSET;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=3)
|
||||
string[i] = string[i] + ENCSTEPODD;
|
||||
|
||||
for(i = 0; (i < str_len && string[i] != NULLBYTE); i+=4)
|
||||
string[i] = string[i] - ENCSTEPEVEN;
|
||||
|
||||
return string;
|
||||
}
|
||||
#include "vars.h"
|
||||
#include "enc.h"
|
||||
|
||||
int process_line(char *line)
|
||||
{
|
||||
char *tok_srch = strtok(line, "=\" ");
|
||||
char *tok_srch;
|
||||
|
||||
tok_srch = strtok(line, "=\" |");
|
||||
|
||||
/* reuse function */
|
||||
/*else if(strncmp("temp",tok_srch,4) == 0)
|
||||
@ -69,9 +35,15 @@ int process_line(char *line)
|
||||
char *parsed;
|
||||
tok_srch = strtok(NULL, "\"");
|
||||
parsed = parse_vars(tok_srch);
|
||||
if(parsed != NULL) printf("%s\n", parsed);
|
||||
/* printf("%s\n", tok_srch); */
|
||||
} /* print function */
|
||||
if(parsed != NULL)
|
||||
{
|
||||
printf("%s\n", parsed);
|
||||
}
|
||||
else
|
||||
{
|
||||
syn_error("ss:error:print compulation error!");
|
||||
}
|
||||
}
|
||||
|
||||
/* sleep function */
|
||||
else if(strncmp("sleep",tok_srch,5) == 0)
|
||||
@ -124,7 +96,7 @@ int process_line(char *line)
|
||||
return_val = system(cmd_line);
|
||||
if(return_val != 0)
|
||||
{
|
||||
printf("ss:%s exited with error code %d\n", cmd_line, return_val);
|
||||
printf("ss:warning:%s exited with error code %d\n", cmd_line, return_val);
|
||||
}
|
||||
}
|
||||
|
||||
@ -149,6 +121,10 @@ int process_line(char *line)
|
||||
/* strtok to the content that will be written to file */
|
||||
tok_srch = strtok(NULL, "\"");
|
||||
tok_srch = strtok(NULL, "\"");
|
||||
if(strcmp(tok_srch, "\n") == 0 ||
|
||||
strcmp(tok_srch, " \n") == 0 || tok_srch != NULL)
|
||||
syn_error("ss:error:write syntax error");
|
||||
|
||||
file_content = parse_vars(tok_srch);
|
||||
fprintf(write_file, "%s\n", file_content);
|
||||
fclose(write_file);
|
||||
|
@ -5,6 +5,4 @@
|
||||
View README file supplied with this software for more details
|
||||
*/
|
||||
|
||||
char *ss_encrypt(char *string);
|
||||
char *ss_decrypt(char *string);
|
||||
int process_line(char *line);
|
||||
|
95
src/util.c
95
src/util.c
@ -31,101 +31,6 @@ char *strip_nl (char *string)
|
||||
}
|
||||
}
|
||||
|
||||
void set_var(int index, char *varname, char *vardata)
|
||||
{
|
||||
strcpy(svars[index].var_name, varname);
|
||||
strcpy(svars[index].var_data, vardata);
|
||||
}
|
||||
|
||||
char *get_var_data(char *varname)
|
||||
{
|
||||
int xx;
|
||||
for(xx = 0; xx < MAXVARS; xx++)
|
||||
{
|
||||
char *varp = svars[xx].var_name;
|
||||
if(*varp == '\0') continue;
|
||||
if(strcmp(varp, varname) == 0)
|
||||
{
|
||||
return svars[xx].var_data;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int get_var_count()
|
||||
{
|
||||
int yy;
|
||||
for(yy = 0; yy < MAXVARS; yy++)
|
||||
{
|
||||
if(strlen(svars[yy].var_name) > 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
return yy;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *parse_vars(char *string)
|
||||
{
|
||||
int str_char, buf_len, var_len;
|
||||
static char finished [MAX_STRING_BUFSIZE];
|
||||
char varbuffer [MAX_VAR_NAME_BUFSIZE];
|
||||
|
||||
/* String pointers */
|
||||
char *input_pointer;
|
||||
char *output_pointer;
|
||||
char *variable_pointer;
|
||||
|
||||
*finished = NULLBYTE;
|
||||
|
||||
for (input_pointer = string, output_pointer = finished;
|
||||
(str_char = *input_pointer) != NULLBYTE;
|
||||
input_pointer++)
|
||||
{
|
||||
if (str_char != TOKEN)
|
||||
{ *output_pointer++ = str_char; *output_pointer = NULLBYTE; continue; }
|
||||
|
||||
variable_pointer = varbuffer;
|
||||
do { *variable_pointer++ = (str_char = *++input_pointer); }
|
||||
while ((str_char != NULLBYTE) && (str_char != TOKEN));
|
||||
|
||||
str_char = *input_pointer;
|
||||
if ((str_char != NULLBYTE) && (str_char != TOKEN))
|
||||
syn_error("ss:error:buffer out of sync");
|
||||
str_char = variable_pointer [-1];
|
||||
if ((str_char != NULLBYTE) && (str_char != TOKEN))
|
||||
syn_error("ss:error:buffer out of sync");
|
||||
|
||||
variable_pointer[-1] = NULLBYTE;
|
||||
|
||||
if(*varbuffer == NULLBYTE)
|
||||
syn_error("ss:error:variable syntax error!");
|
||||
|
||||
variable_pointer = get_var_data(varbuffer);
|
||||
|
||||
if(variable_pointer == NULL)
|
||||
syn_error("ss:error:variable syntax error!");
|
||||
|
||||
var_len = strlen(variable_pointer);
|
||||
buf_len = strlen(finished) + var_len;
|
||||
|
||||
if(buf_len > MAX_STRING_LEN)
|
||||
syn_error("ss:error:string buffer overflow!");
|
||||
|
||||
strcat (finished, variable_pointer);
|
||||
output_pointer += var_len;
|
||||
if(*input_pointer == NULLBYTE) break;
|
||||
}
|
||||
|
||||
*output_pointer = NULLBYTE;
|
||||
return finished;
|
||||
}
|
||||
|
||||
void parse_args(int argc, char** argv)
|
||||
{
|
||||
/* -h flag given, show help */
|
||||
|
13
src/util.h
13
src/util.h
@ -5,19 +5,6 @@
|
||||
View README file supplied with this software for more details
|
||||
*/
|
||||
|
||||
struct s_variables
|
||||
{
|
||||
char var_name [MAX_VAR_NAME_LEN];
|
||||
char var_data [MAX_VAR_DATA_LEN];
|
||||
};
|
||||
|
||||
typedef struct s_variables VARS;
|
||||
VARS svars[MAXVARS];
|
||||
|
||||
void syn_error(char *message);
|
||||
char *strip_nl(char *string);
|
||||
void set_var(int index, char *varname, char *vardata);
|
||||
int get_var_count();
|
||||
char *get_var_data(char *varname);
|
||||
char *parse_vars(char *string);
|
||||
void parse_args(int argc, char** argv);
|
||||
|
104
src/vars.c
Normal file
104
src/vars.c
Normal file
@ -0,0 +1,104 @@
|
||||
/*
|
||||
SlideScript - minimalistic top-down scripting language.
|
||||
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
|
||||
|
||||
View README file supplied with this software for more details
|
||||
*/
|
||||
|
||||
#include "deps.h"
|
||||
#include "vars.h"
|
||||
#include "util.h"
|
||||
|
||||
void set_var(int index, char *varname, char *vardata)
|
||||
{
|
||||
strcpy(svars[index].var_name, varname);
|
||||
strcpy(svars[index].var_data, vardata);
|
||||
}
|
||||
|
||||
char *get_var_data(char *varname)
|
||||
{
|
||||
int xx;
|
||||
for(xx = 0; xx < MAXVARS; xx++)
|
||||
{
|
||||
char *varp = svars[xx].var_name;
|
||||
if(*varp == '\0') continue;
|
||||
if(strcmp(varp, varname) == 0)
|
||||
{
|
||||
return svars[xx].var_data;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int get_var_count()
|
||||
{
|
||||
int yy;
|
||||
for(yy = 0; yy < MAXVARS; yy++)
|
||||
{
|
||||
if(strlen(svars[yy].var_name) > 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
return yy;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *parse_vars(char *string)
|
||||
{
|
||||
int str_char, buf_len, var_len;
|
||||
static char finished [MAX_STRING_BUFSIZE];
|
||||
char varbuffer [MAX_VAR_NAME_BUFSIZE];
|
||||
|
||||
/* String pointers */
|
||||
char *input_pointer;
|
||||
char *output_pointer;
|
||||
char *variable_pointer;
|
||||
|
||||
*finished = NULLBYTE;
|
||||
|
||||
for (input_pointer = string, output_pointer = finished;
|
||||
(str_char = *input_pointer) != NULLBYTE;
|
||||
input_pointer++)
|
||||
{
|
||||
if (str_char != TOKEN)
|
||||
{ *output_pointer++ = str_char; *output_pointer = NULLBYTE; continue; }
|
||||
|
||||
variable_pointer = varbuffer;
|
||||
do { *variable_pointer++ = (str_char = *++input_pointer); }
|
||||
while ((str_char != NULLBYTE) && (str_char != TOKEN));
|
||||
|
||||
str_char = *input_pointer;
|
||||
if ((str_char != NULLBYTE) && (str_char != TOKEN))
|
||||
syn_error("ss:error:buffer out of sync");
|
||||
str_char = variable_pointer [-1];
|
||||
if ((str_char != NULLBYTE) && (str_char != TOKEN))
|
||||
syn_error("ss:error:buffer out of sync");
|
||||
|
||||
variable_pointer[-1] = NULLBYTE;
|
||||
|
||||
if(*varbuffer == NULLBYTE)
|
||||
syn_error("ss:error:variable syntax error!");
|
||||
|
||||
variable_pointer = get_var_data(varbuffer);
|
||||
if(variable_pointer == NULL)
|
||||
syn_error("ss:error:variable syntax error!");
|
||||
|
||||
var_len = strlen(variable_pointer);
|
||||
buf_len = strlen(finished) + var_len;
|
||||
|
||||
if(buf_len > MAX_STRING_LEN)
|
||||
syn_error("ss:error:string buffer overflow!");
|
||||
|
||||
strcat (finished, variable_pointer);
|
||||
output_pointer += var_len;
|
||||
if(*input_pointer == NULLBYTE) break;
|
||||
}
|
||||
|
||||
*output_pointer = NULLBYTE;
|
||||
return finished;
|
||||
}
|
20
src/vars.h
Normal file
20
src/vars.h
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
SlideScript - minimalistic top-down scripting language.
|
||||
(C) Copyright 2014-2021 Chris Dorman - some rights reserved (CC-BY-SA 3.0)
|
||||
|
||||
View README file supplied with this software for more details
|
||||
*/
|
||||
|
||||
struct s_variables
|
||||
{
|
||||
char var_name [MAX_VAR_NAME_LEN];
|
||||
char var_data [MAX_VAR_DATA_LEN];
|
||||
};
|
||||
|
||||
typedef struct s_variables VARS;
|
||||
VARS svars[MAXVARS];
|
||||
|
||||
void set_var(int index, char *varname, char *vardata);
|
||||
int get_var_count();
|
||||
char *get_var_data(char *varname);
|
||||
char *parse_vars(char *string);
|
6
test.ss
6
test.ss
@ -5,9 +5,9 @@
|
||||
# Sets 'ss_filename' to 'file.txt'
|
||||
ss_filename=file.txt
|
||||
# Sets 'ss_exec_command' to 'ls -al'
|
||||
ss_exec_command=uname -a
|
||||
ss_exec_command=ls -al
|
||||
# Sets 'ss_decoded' to 'Encrypt This Data!'
|
||||
ss_decoded=Decrypt This Data!
|
||||
ss_decoded=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/][-_.,?!
|
||||
# Sets 'ss_encoded' to 'Ghfs~su#Yilv#Gduf$'
|
||||
ss_encoded=Ghfs~su#Yilv#Gduf$
|
||||
# Sets 'ss_file_content' to 'This will be written to file.txt!'
|
||||
@ -22,7 +22,7 @@ print "Sleeping before writing '%ss_file_content%' to '%ss_filename%'"
|
||||
sleep 1
|
||||
|
||||
# Writes the content of ss_file_content to ss_filename
|
||||
write "%ss_filename%" "%ss_file_content%"
|
||||
write "%ss_filename%"
|
||||
|
||||
print "Data written to %ss_filename%:"
|
||||
# Reads data and prints to screen from ss_filename
|
||||
|
Loading…
x
Reference in New Issue
Block a user