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
|
PREFIX ?= /usr
|
||||||
|
|
||||||
CC ?= cc
|
CC ?= gcc
|
||||||
CFLAGS += -O2 -ansi -pedantic -g -Wall -Wextra --param=ssp-buffer-size=2 -fstack-protector-all
|
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
|
CPPFLAGS += -DVERSION=$(VERSION) -DVERSION_EXTRA=$(VERSION_EXTRA) -D_FORTIFY_SOURCE=2
|
||||||
LDFLAGS += -Wl,-O1,--sort-common,--hash-style=gnu,-z,relro
|
LDFLAGS += -Wl,-O1,--sort-common,--hash-style=gnu,-z,relro
|
||||||
BIN ?= slidescript
|
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
|
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 "deps.h"
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
|
#include "vars.h"
|
||||||
char *ss_encrypt(char *string)
|
#include "enc.h"
|
||||||
{
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
int process_line(char *line)
|
int process_line(char *line)
|
||||||
{
|
{
|
||||||
char *tok_srch = strtok(line, "=\" ");
|
char *tok_srch;
|
||||||
|
|
||||||
|
tok_srch = strtok(line, "=\" |");
|
||||||
|
|
||||||
/* reuse function */
|
/* reuse function */
|
||||||
/*else if(strncmp("temp",tok_srch,4) == 0)
|
/*else if(strncmp("temp",tok_srch,4) == 0)
|
||||||
@ -69,9 +35,15 @@ int process_line(char *line)
|
|||||||
char *parsed;
|
char *parsed;
|
||||||
tok_srch = strtok(NULL, "\"");
|
tok_srch = strtok(NULL, "\"");
|
||||||
parsed = parse_vars(tok_srch);
|
parsed = parse_vars(tok_srch);
|
||||||
if(parsed != NULL) printf("%s\n", parsed);
|
if(parsed != NULL)
|
||||||
/* printf("%s\n", tok_srch); */
|
{
|
||||||
} /* print function */
|
printf("%s\n", parsed);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
syn_error("ss:error:print compulation error!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* sleep function */
|
/* sleep function */
|
||||||
else if(strncmp("sleep",tok_srch,5) == 0)
|
else if(strncmp("sleep",tok_srch,5) == 0)
|
||||||
@ -124,7 +96,7 @@ int process_line(char *line)
|
|||||||
return_val = system(cmd_line);
|
return_val = system(cmd_line);
|
||||||
if(return_val != 0)
|
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 */
|
/* strtok to the content that will be written to file */
|
||||||
tok_srch = strtok(NULL, "\"");
|
tok_srch = strtok(NULL, "\"");
|
||||||
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);
|
file_content = parse_vars(tok_srch);
|
||||||
fprintf(write_file, "%s\n", file_content);
|
fprintf(write_file, "%s\n", file_content);
|
||||||
fclose(write_file);
|
fclose(write_file);
|
||||||
|
@ -5,6 +5,4 @@
|
|||||||
View README file supplied with this software for more details
|
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);
|
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)
|
void parse_args(int argc, char** argv)
|
||||||
{
|
{
|
||||||
/* -h flag given, show help */
|
/* -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
|
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);
|
void syn_error(char *message);
|
||||||
char *strip_nl(char *string);
|
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);
|
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'
|
# Sets 'ss_filename' to 'file.txt'
|
||||||
ss_filename=file.txt
|
ss_filename=file.txt
|
||||||
# Sets 'ss_exec_command' to 'ls -al'
|
# Sets 'ss_exec_command' to 'ls -al'
|
||||||
ss_exec_command=uname -a
|
ss_exec_command=ls -al
|
||||||
# Sets 'ss_decoded' to 'Encrypt This Data!'
|
# Sets 'ss_decoded' to 'Encrypt This Data!'
|
||||||
ss_decoded=Decrypt This Data!
|
ss_decoded=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ/][-_.,?!
|
||||||
# Sets 'ss_encoded' to 'Ghfs~su#Yilv#Gduf$'
|
# Sets 'ss_encoded' to 'Ghfs~su#Yilv#Gduf$'
|
||||||
ss_encoded=Ghfs~su#Yilv#Gduf$
|
ss_encoded=Ghfs~su#Yilv#Gduf$
|
||||||
# Sets 'ss_file_content' to 'This will be written to file.txt!'
|
# 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
|
sleep 1
|
||||||
|
|
||||||
# Writes the content of ss_file_content to ss_filename
|
# 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%:"
|
print "Data written to %ss_filename%:"
|
||||||
# Reads data and prints to screen from ss_filename
|
# Reads data and prints to screen from ss_filename
|
||||||
|
Loading…
x
Reference in New Issue
Block a user