Call this v0.4.5, added a heap of crap, and fixed some mem errors

This commit is contained in:
Pentium44 2021-04-09 00:48:09 -07:00
parent e5c0aba078
commit 6dd32ca7a1
8 changed files with 162 additions and 8 deletions

View File

@ -2,7 +2,7 @@
# (C) Copyright 2014-2021 Chris Dorman, some rights reserved (GPLv2)
# Some changes and tweaks from Menchers
VERSION = \"0.4.4\"
VERSION = \"0.4.5\"
VERSION_EXTRA = \"$(EXTRA)\"
PREFIX ?= /usr

View File

@ -36,8 +36,14 @@ at this moment!
* Time example:
* time
* Isdir function, example:
* Isdir and isfile function, example:
* isdir "examples/" -> returns 0 for not, 1 for is
* isfile "examples/functions.ss" -> returns 1, its there
* mkdir and mkfile functions, example:
* mkfile "file.txt" -> creates empty 'file.txt'
* mkdir "testing/" -> creates directory 'testing'
* mkfile "testing/file.txt" -> creates directory 'testing', and creates 'file.txt'
* Delete example:
* delete "file.txt"
@ -125,6 +131,12 @@ Changelog
Changes between version bumps in SlideScript. Hoping to have a lightweight top-down scripting language
by V1.0.0 release! From there it will be molding and preserving the art.
* V0.4.5
* Multiple bug fixes in not setting null byte to dynamic mem before strcat is used
* Function isfile, as well as mkfile and mkdir are added
* Added grep like function, search!
* Cleanup code
* V0.4.4
* Softened the kill program errors, added warn functions behind the scenes
* Added backquote function processing in variables

View File

@ -24,7 +24,8 @@
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
// For checking if file exists
// For file handling
#include <assert.h>
#include <sys/stat.h>
// For string searching
#include <regex.h>

View File

@ -25,6 +25,11 @@ char *process_line(char *line)
static char concatbuf[MAX_CONCAT_BUF+1];
static char filebuf[MAX_READFILE_LEN+1];
// Make sure static buffers are empty before initialize
// This was a big bug here for a minute.
bzero(filebuf, MAX_READFILE_LEN);
bzero(concatbuf, MAX_CONCAT_BUF);
tok_srch = strtok(line, "=\" |");
/* reuse function */
@ -42,8 +47,83 @@ char *process_line(char *line)
if(strncmp("exit", tok_srch, 4) == 0)
syn_error("ss:exit called");
/* mkdir function, and mkfile functions */
else if(strncmp("mkdir",tok_srch,5) == 0)
{
int parsed;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
{
syn_warn("ss:warn:mkdir syntax error, missing quote?");
return NULL;
}
if(strtok(NULL, "\"")==NULL)
{
syn_warn("ss:warn:mkdir syntax error, missing end quote?");
return NULL;
}
parsed = file_exists(parse_vars(tok_srch));
if(parsed == 1)
{
syn_warn("ss:warn:mkdir, file exists");
return NULL;
}
// Create directory if need pe
int mkpret = mkpath(parse_vars(tok_srch), 0755);
if(mkpret == -1)
syn_warn("ss:warn:mkdir, failed to make directory");
return NULL;
}
else if(strncmp("mkfile",tok_srch,5) == 0)
{
int parsed;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
{
syn_warn("ss:warn:mkfile syntax error, missing quote?");
return NULL;
}
if(strtok(NULL, "\"")==NULL)
{
syn_warn("ss:warn:mkfile syntax error, missing end quote?");
return NULL;
}
parsed = file_exists(parse_vars(tok_srch));
if(parsed == 1)
{
syn_warn("ss:warn:mkfile, file exists");
return NULL;
}
// Create directory if need pe
int mkpret = mkpath(parse_vars(tok_srch), 0755);
if(mkpret == -1)
syn_warn("ss:warn:mkfile, failed to form parent path, attempting to write file.");
FILE *cfile = fopen(parse_vars(tok_srch), "w");
if(cfile == NULL)
{
syn_warn("ss:warn:mkfile, failed to open file");
return NULL;
}
fprintf(cfile, "%d", '\0');
fclose(cfile);
return NULL;
}
/* time function */
/* print function */
else if(strncmp("time",tok_srch,4) == 0)
{
char *parsed;
@ -51,7 +131,35 @@ char *process_line(char *line)
return strip_nl(parsed);
}
/* print function */
/* isfile function */
else if(strncmp("isfile",tok_srch,5) == 0)
{
int parsed;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
{
syn_warn("ss:warn:isfile syntax error, missing quote?");
return NULL;
}
if(strtok(NULL, "\"")==NULL)
{
syn_warn("ss:warn:isfile syntax error, missing end quote?");
return NULL;
}
parsed = file_exists(parse_vars(tok_srch));
if(parsed == 1)
{
return "1";
}
else
{
return "0";
}
}
/* isdir function */
else if(strncmp("isdir",tok_srch,5) == 0)
{
int parsed;
@ -527,6 +635,8 @@ char *process_line(char *line)
FILE* search_file = NULL;
/* strtok to filename of function */
bzero(filename, MAX_FILENAME_LEN);
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
{
@ -553,7 +663,6 @@ char *process_line(char *line)
/* Check if file exists and can be opened */
if(search_file == NULL)
{
fclose(search_file);
syn_warn("ss:warn:search, failed to open file");
return NULL;
}
@ -624,7 +733,6 @@ char *process_line(char *line)
/* Check if file exists and can be opened */
if(write_file == NULL)
{
fclose(write_file);
syn_warn("ss:warn:write, failed to open file");
return NULL;
}
@ -708,6 +816,8 @@ char *process_line(char *line)
dynfile = (char *)malloc(read_size + 1);
*dynfile = '\0';
/* Check if file was opened successfully */
if(read_file == NULL)
{
@ -779,7 +889,6 @@ char *process_line(char *line)
/* strtok to the content that will be written to file */
if(read_file == NULL)
{
fclose(read_file);
syn_warn("ss:warn:cat, failed to open file");
return NULL;
}
@ -820,6 +929,8 @@ char *process_line(char *line)
dynfile = (char *)malloc(read_size + 1);
*dynfile = '\0';
while(fgets(read_line, sizeof(read_line), read_file) != NULL)
{
strcat(dynfile, read_line);

View File

@ -42,6 +42,9 @@ void ss_piping(char *string)
for(int vv = 0; vv < MAX_PIPE_CMDS; vv++) bzero(spipe[vv].command,MAX_STRING_LEN);
stringmem = (char *) malloc(strlen(string)+1);
*stringmem = '\0';
if(stringmem == NULL) syn_error("ss:error:memory mapping error...");
sprintf(stringmem, "%s", string);

View File

@ -19,6 +19,8 @@ char *ss_search(const char *filename, FILE *fp, char *pat)
char tmpbuf[TMPBUF_LEN+1];
int flags = REG_NOSUB; /* don't need where-matched info */
bzero(retbuf, MAX_SEARCH_LEN);
regcomp(&pattern, pat, flags);
while(getline(&s_buf, &size, fp) != -1)
@ -49,5 +51,7 @@ char *ss_search(const char *filename, FILE *fp, char *pat)
free(s_buf);
regfree(&pattern);
return retbuf;
}

View File

@ -57,6 +57,28 @@ int is_dir(char *path)
return 0;
}
// mkpath function for mkdir and mkfile
int mkpath(char* file_path, mode_t mode)
{
assert(file_path && *file_path);
for (char* p = strchr(file_path + 1, '/'); p; p = strchr(p + 1, '/'))
{
*p = '\0';
if (mkdir(file_path, mode) == -1)
{
if (errno != EEXIST)
{
*p = '/';
return -1;
}
}
*p = '/';
}
return 0;
}
char *ss_concat(char *str1, char *str2)
{
char *dymem = (char *) malloc((strlen(str1)+strlen(str2)) + 3);

View File

@ -10,6 +10,7 @@ void syn_warn(char *message);
char *strip_nl(char *string);
int file_exists(char *path);
int is_dir(char *path);
int mkpath(char* file_path, mode_t mode);
char *ss_concat(char *str1, char *str2);
void parse_args(int argc, char** argv);
char *ss_time();