Call this v0.4.5, added a heap of crap, and fixed some mem errors
This commit is contained in:
parent
e5c0aba078
commit
6dd32ca7a1
2
Makefile
2
Makefile
@ -2,7 +2,7 @@
|
|||||||
# (C) Copyright 2014-2021 Chris Dorman, some rights reserved (GPLv2)
|
# (C) Copyright 2014-2021 Chris Dorman, some rights reserved (GPLv2)
|
||||||
# Some changes and tweaks from Menchers
|
# Some changes and tweaks from Menchers
|
||||||
|
|
||||||
VERSION = \"0.4.4\"
|
VERSION = \"0.4.5\"
|
||||||
VERSION_EXTRA = \"$(EXTRA)\"
|
VERSION_EXTRA = \"$(EXTRA)\"
|
||||||
|
|
||||||
PREFIX ?= /usr
|
PREFIX ?= /usr
|
||||||
|
14
README.txt
14
README.txt
@ -36,8 +36,14 @@ at this moment!
|
|||||||
* Time example:
|
* Time example:
|
||||||
* time
|
* time
|
||||||
|
|
||||||
* Isdir function, example:
|
* Isdir and isfile function, example:
|
||||||
* isdir "examples/" -> returns 0 for not, 1 for is
|
* 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 example:
|
||||||
* delete "file.txt"
|
* delete "file.txt"
|
||||||
@ -125,6 +131,12 @@ Changelog
|
|||||||
Changes between version bumps in SlideScript. Hoping to have a lightweight top-down scripting language
|
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.
|
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
|
* V0.4.4
|
||||||
* Softened the kill program errors, added warn functions behind the scenes
|
* Softened the kill program errors, added warn functions behind the scenes
|
||||||
* Added backquote function processing in variables
|
* Added backquote function processing in variables
|
||||||
|
@ -24,7 +24,8 @@
|
|||||||
#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 checking if file exists
|
// For file handling
|
||||||
|
#include <assert.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
// For string searching
|
// For string searching
|
||||||
#include <regex.h>
|
#include <regex.h>
|
||||||
|
121
src/functions.c
121
src/functions.c
@ -25,6 +25,11 @@ char *process_line(char *line)
|
|||||||
static char concatbuf[MAX_CONCAT_BUF+1];
|
static char concatbuf[MAX_CONCAT_BUF+1];
|
||||||
static char filebuf[MAX_READFILE_LEN+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, "=\" |");
|
tok_srch = strtok(line, "=\" |");
|
||||||
|
|
||||||
/* reuse function */
|
/* reuse function */
|
||||||
@ -42,8 +47,83 @@ char *process_line(char *line)
|
|||||||
if(strncmp("exit", tok_srch, 4) == 0)
|
if(strncmp("exit", tok_srch, 4) == 0)
|
||||||
syn_error("ss:exit called");
|
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 */
|
/* time function */
|
||||||
/* print function */
|
|
||||||
else if(strncmp("time",tok_srch,4) == 0)
|
else if(strncmp("time",tok_srch,4) == 0)
|
||||||
{
|
{
|
||||||
char *parsed;
|
char *parsed;
|
||||||
@ -51,7 +131,35 @@ char *process_line(char *line)
|
|||||||
return strip_nl(parsed);
|
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)
|
else if(strncmp("isdir",tok_srch,5) == 0)
|
||||||
{
|
{
|
||||||
int parsed;
|
int parsed;
|
||||||
@ -527,6 +635,8 @@ char *process_line(char *line)
|
|||||||
FILE* search_file = NULL;
|
FILE* search_file = NULL;
|
||||||
/* strtok to filename of function */
|
/* strtok to filename of function */
|
||||||
|
|
||||||
|
bzero(filename, MAX_FILENAME_LEN);
|
||||||
|
|
||||||
tok_srch = strtok(NULL, "\"");
|
tok_srch = strtok(NULL, "\"");
|
||||||
if(tok_srch == NULL)
|
if(tok_srch == NULL)
|
||||||
{
|
{
|
||||||
@ -553,7 +663,6 @@ char *process_line(char *line)
|
|||||||
/* Check if file exists and can be opened */
|
/* Check if file exists and can be opened */
|
||||||
if(search_file == NULL)
|
if(search_file == NULL)
|
||||||
{
|
{
|
||||||
fclose(search_file);
|
|
||||||
syn_warn("ss:warn:search, failed to open file");
|
syn_warn("ss:warn:search, failed to open file");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -624,7 +733,6 @@ char *process_line(char *line)
|
|||||||
/* Check if file exists and can be opened */
|
/* Check if file exists and can be opened */
|
||||||
if(write_file == NULL)
|
if(write_file == NULL)
|
||||||
{
|
{
|
||||||
fclose(write_file);
|
|
||||||
syn_warn("ss:warn:write, failed to open file");
|
syn_warn("ss:warn:write, failed to open file");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -708,6 +816,8 @@ char *process_line(char *line)
|
|||||||
|
|
||||||
dynfile = (char *)malloc(read_size + 1);
|
dynfile = (char *)malloc(read_size + 1);
|
||||||
|
|
||||||
|
*dynfile = '\0';
|
||||||
|
|
||||||
/* Check if file was opened successfully */
|
/* Check if file was opened successfully */
|
||||||
if(read_file == NULL)
|
if(read_file == NULL)
|
||||||
{
|
{
|
||||||
@ -779,7 +889,6 @@ char *process_line(char *line)
|
|||||||
/* strtok to the content that will be written to file */
|
/* strtok to the content that will be written to file */
|
||||||
if(read_file == NULL)
|
if(read_file == NULL)
|
||||||
{
|
{
|
||||||
fclose(read_file);
|
|
||||||
syn_warn("ss:warn:cat, failed to open file");
|
syn_warn("ss:warn:cat, failed to open file");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -820,6 +929,8 @@ char *process_line(char *line)
|
|||||||
|
|
||||||
dynfile = (char *)malloc(read_size + 1);
|
dynfile = (char *)malloc(read_size + 1);
|
||||||
|
|
||||||
|
*dynfile = '\0';
|
||||||
|
|
||||||
while(fgets(read_line, sizeof(read_line), read_file) != NULL)
|
while(fgets(read_line, sizeof(read_line), read_file) != NULL)
|
||||||
{
|
{
|
||||||
strcat(dynfile, read_line);
|
strcat(dynfile, read_line);
|
||||||
|
@ -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);
|
for(int vv = 0; vv < MAX_PIPE_CMDS; vv++) bzero(spipe[vv].command,MAX_STRING_LEN);
|
||||||
|
|
||||||
stringmem = (char *) malloc(strlen(string)+1);
|
stringmem = (char *) malloc(strlen(string)+1);
|
||||||
|
|
||||||
|
*stringmem = '\0';
|
||||||
|
|
||||||
if(stringmem == NULL) syn_error("ss:error:memory mapping error...");
|
if(stringmem == NULL) syn_error("ss:error:memory mapping error...");
|
||||||
|
|
||||||
sprintf(stringmem, "%s", string);
|
sprintf(stringmem, "%s", string);
|
||||||
|
@ -19,6 +19,8 @@ char *ss_search(const char *filename, FILE *fp, char *pat)
|
|||||||
char tmpbuf[TMPBUF_LEN+1];
|
char tmpbuf[TMPBUF_LEN+1];
|
||||||
int flags = REG_NOSUB; /* don't need where-matched info */
|
int flags = REG_NOSUB; /* don't need where-matched info */
|
||||||
|
|
||||||
|
bzero(retbuf, MAX_SEARCH_LEN);
|
||||||
|
|
||||||
regcomp(&pattern, pat, flags);
|
regcomp(&pattern, pat, flags);
|
||||||
|
|
||||||
while(getline(&s_buf, &size, fp) != -1)
|
while(getline(&s_buf, &size, fp) != -1)
|
||||||
@ -49,5 +51,7 @@ char *ss_search(const char *filename, FILE *fp, char *pat)
|
|||||||
|
|
||||||
free(s_buf);
|
free(s_buf);
|
||||||
|
|
||||||
|
regfree(&pattern);
|
||||||
|
|
||||||
return retbuf;
|
return retbuf;
|
||||||
}
|
}
|
||||||
|
22
src/util.c
22
src/util.c
@ -57,6 +57,28 @@ int is_dir(char *path)
|
|||||||
return 0;
|
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 *ss_concat(char *str1, char *str2)
|
||||||
{
|
{
|
||||||
char *dymem = (char *) malloc((strlen(str1)+strlen(str2)) + 3);
|
char *dymem = (char *) malloc((strlen(str1)+strlen(str2)) + 3);
|
||||||
|
@ -10,6 +10,7 @@ void syn_warn(char *message);
|
|||||||
char *strip_nl(char *string);
|
char *strip_nl(char *string);
|
||||||
int file_exists(char *path);
|
int file_exists(char *path);
|
||||||
int is_dir(char *path);
|
int is_dir(char *path);
|
||||||
|
int mkpath(char* file_path, mode_t mode);
|
||||||
char *ss_concat(char *str1, char *str2);
|
char *ss_concat(char *str1, char *str2);
|
||||||
void parse_args(int argc, char** argv);
|
void parse_args(int argc, char** argv);
|
||||||
char *ss_time();
|
char *ss_time();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user