utilities/lib
This commit is contained in:
		
							parent
							
								
									ce8ac30706
								
							
						
					
					
						commit
						5fbbf96062
					
				
							
								
								
									
										10
									
								
								lib/banned.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								lib/banned.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
#ifndef _BANNED_H
 | 
			
		||||
#	define BANNED_H
 | 
			
		||||
 | 
			
		||||
#	define Use_of_this_function_is_not_permitted(a) invalid_token
 | 
			
		||||
#	define BAN(a) Use_of_this_function_is_not_permitted(a)
 | 
			
		||||
 | 
			
		||||
#	undef strcat
 | 
			
		||||
#	define strcat(a,b) BAN(strcat)
 | 
			
		||||
 | 
			
		||||
#endif /* ifndef _BANNED_H */
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								lib/libcharin.o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lib/libcharin.o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										30
									
								
								lib/libio.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								lib/libio.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
#ifndef _LIBIO_H
 | 
			
		||||
 | 
			
		||||
#	define _LIBIO_H
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
fdputs(int fd, const char *s){
 | 
			
		||||
	int i;
 | 
			
		||||
	int r;
 | 
			
		||||
 | 
			
		||||
	for(i = 0; s[i] != '\0'; ++i);
 | 
			
		||||
 | 
			
		||||
	/* DANGER */
 | 
			
		||||
	s[i] = '\n';
 | 
			
		||||
	r = write(fd, s, i + 1);
 | 
			
		||||
	s[i] = '\0';
 | 
			
		||||
	/* /danger */
 | 
			
		||||
 | 
			
		||||
	return r;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#	ifndef _STDIO_H
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
puts(const char *s){
 | 
			
		||||
	return fdputs(1, s);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#	endif /* ifndef _STDIO_H */
 | 
			
		||||
 | 
			
		||||
#endif /* ifndef _LIBIO_H */
 | 
			
		||||
							
								
								
									
										59
									
								
								lib/libshell.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								lib/libshell.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
			
		||||
#include "libshell.h"
 | 
			
		||||
 | 
			
		||||
char **
 | 
			
		||||
getpaths(void)
 | 
			
		||||
{
 | 
			
		||||
	char *p;
 | 
			
		||||
	char **q;
 | 
			
		||||
	char *path;
 | 
			
		||||
	size_t path_s;
 | 
			
		||||
	char *path_temp;
 | 
			
		||||
	char **paths;
 | 
			
		||||
	size_t paths_s;
 | 
			
		||||
 | 
			
		||||
	if((path_temp = getenv(PATH_NAME)) == NULL){
 | 
			
		||||
		errno = ENOMEM; /* Cannot allocate memory */
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* How long is path? */
 | 
			
		||||
	for(path_s = 0; path_temp[path_s] != '\0'; ++path_s);
 | 
			
		||||
	/* path_s has the size of the path string, not including the null
 | 
			
		||||
	 * terminator */
 | 
			
		||||
 | 
			
		||||
	/* getenv's return value mustn't be modified so copy it into memory we
 | 
			
		||||
	 * control */
 | 
			
		||||
	if((path = malloc(sizeof(char) * (path_s + 1))) == NULL){
 | 
			
		||||
		errno = ENOMEM; /* Cannot allocate memory */
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	memcpy(path, path_temp, path_s + 1);
 | 
			
		||||
	path_temp = NULL;
 | 
			
		||||
	path_s = 0; /* This shouldn't be necessary anymore */
 | 
			
		||||
 | 
			
		||||
	/* How many paths in $PATH? */
 | 
			
		||||
	for(paths_s = 1, p = path; *p != '\0'; paths_s += *p++ == PATH_DELIMITER);
 | 
			
		||||
 | 
			
		||||
	if((paths = malloc(sizeof(char *) * (paths_s + 1))) == NULL){
 | 
			
		||||
		free(path);
 | 
			
		||||
		errno = ENOMEM; /* Cannot allocate memory */
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Replace all instances of the path delimiter with 0, and then put the
 | 
			
		||||
	 * next path beginning into paths. */
 | 
			
		||||
	/* This way we can get multiple strings out of one span of memory. */
 | 
			
		||||
	for(*paths = p = path, q = paths + 1; *p != '\0';)
 | 
			
		||||
		if(*p++ == PATH_DELIMITER){
 | 
			
		||||
			*(p - 1) = '\0';
 | 
			
		||||
			*q++ = p;
 | 
			
		||||
		}
 | 
			
		||||
	
 | 
			
		||||
	paths[path_s] = NULL;
 | 
			
		||||
 | 
			
		||||
	/* Because paths[0] will always be path, we can just free(*paths) at
 | 
			
		||||
	 * the end and discard path */
 | 
			
		||||
	path = NULL;
 | 
			
		||||
 | 
			
		||||
	return paths;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								lib/libshell.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								lib/libshell.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdlib.h> /* getenv(3), malloc(3) */
 | 
			
		||||
#include <string.h> /* memcpy(3) */
 | 
			
		||||
 | 
			
		||||
/* For the shell variable $PATH */
 | 
			
		||||
#define PATH_NAME "PATH"
 | 
			
		||||
#define PATH_DELIMITER ':'
 | 
			
		||||
 | 
			
		||||
/* Returns a list of the current paths ordered from first to last priority.
 | 
			
		||||
 * output must be freed and *output must be freed! */
 | 
			
		||||
char **getpaths(void);
 | 
			
		||||
							
								
								
									
										90
									
								
								lib/libstr.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								lib/libstr.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,90 @@
 | 
			
		||||
#include "libstr.h"
 | 
			
		||||
 | 
			
		||||
/* Use strchr in <string.h> */
 | 
			
		||||
/* char *charin(char c, char *str){ return strchr(str, c); } */
 | 
			
		||||
/* size_t charindex(char c, char *str){ return strchr(str, c) - str; } */
 | 
			
		||||
/* bool charisin(char c, char *str){ return strchr(str, c) == NULL; } */
 | 
			
		||||
 | 
			
		||||
/* lower bound is a limitation of mathematics,
 | 
			
		||||
 * upper bound is controlled by how many digits are defined
 | 
			
		||||
 * in the header */
 | 
			
		||||
#define CHECKBASE(b) ((b) >= 2 && base < (sizeof(ASCII_DIGITS_LOWER) / sizeof(*ASCII_DIGITS_LOWER))
 | 
			
		||||
 | 
			
		||||
int *
 | 
			
		||||
strtonumb(char *s, enum Strtype t, void *n, int base){
 | 
			
		||||
	int i;
 | 
			
		||||
	int polarity;
 | 
			
		||||
	int retval;
 | 
			
		||||
	retval = 0;
 | 
			
		||||
	while(*s != '\0'){
 | 
			
		||||
		if(!CHECKBASE(base))
 | 
			
		||||
			return NULL;
 | 
			
		||||
		/* assume *s is in ASCII_DIGITS_LOWER or ASCII_DIGITS_UPPER */
 | 
			
		||||
		for(i = 0; i < base; ++i)
 | 
			
		||||
			if(ASCII_DIGITS_LOWER[i] == *s
 | 
			
		||||
					|| ASCII_DIGITS_UPPER == *s){
 | 
			
		||||
				retval = retval * 10 + i;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		if(i == base)
 | 
			
		||||
			return NULL;
 | 
			
		||||
		++s;
 | 
			
		||||
	}
 | 
			
		||||
	*n = retval;
 | 
			
		||||
	return n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
stris(enum Strtype t, char *s){
 | 
			
		||||
	return strisb(t, s, 10);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
strisb(enum Strtype t, char *s, int base)
 | 
			
		||||
{
 | 
			
		||||
	int retval;
 | 
			
		||||
	retval = 0;
 | 
			
		||||
 | 
			
		||||
	int i;
 | 
			
		||||
 | 
			
		||||
	if(!CHECKBASE(base))
 | 
			
		||||
		return -1;
 | 
			
		||||
 | 
			
		||||
	/* negatives */
 | 
			
		||||
	if((t == STRIS_TYPE_FLOAT || t == STRIS_TYPE_INT) && *s == '-'){
 | 
			
		||||
		++s;
 | 
			
		||||
		if(t == STRIS_TYPE_INT)
 | 
			
		||||
			t = STRIS_TYPE_UINT;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	while(*s != '\0')
 | 
			
		||||
		switch(t){
 | 
			
		||||
		case STRIS_TYPE_FLOAT:
 | 
			
		||||
			if(*s == '.'){
 | 
			
		||||
				++s;
 | 
			
		||||
				t = STRIS_TYPE_UINT;
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
			/* FALLTHROUGH */
 | 
			
		||||
		default:
 | 
			
		||||
			for(i = 0; i < base; ++i)
 | 
			
		||||
				if(ASCII_DIGITS_LOWER[i] == *s
 | 
			
		||||
						|| ASCII_DIGITS_UPPER[i] == *s){
 | 
			
		||||
					retval = 1;
 | 
			
		||||
					break;
 | 
			
		||||
				}
 | 
			
		||||
			if(i == base)
 | 
			
		||||
				return 0;
 | 
			
		||||
			++s;
 | 
			
		||||
		}
 | 
			
		||||
	return retval;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
int
 | 
			
		||||
strisb(enum Strtype t, char *s, int base){
 | 
			
		||||
	int n;
 | 
			
		||||
	return !(strtonumb(s, t, &n, base) == NULL);
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								lib/libstr.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								lib/libstr.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
#include "ascii.h"
 | 
			
		||||
 | 
			
		||||
enum Strtype{
 | 
			
		||||
	STRIS_TYPE_UINT = 1,
 | 
			
		||||
	STRIS_TYPE_INT,
 | 
			
		||||
	STRIS_TYPE_FLOAT
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int strisb(enum Strtype t, char *str, int base);
 | 
			
		||||
int stris(enum Strtype t, char *str);
 | 
			
		||||
							
								
								
									
										21
									
								
								lib/libwakeonlan.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								lib/libwakeonlan.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,21 @@
 | 
			
		||||
#include "libwakeonlan.h"
 | 
			
		||||
 | 
			
		||||
/* Returns a byte array of 6 0xFF and 16 repetitions of the 6-byte MAC. */
 | 
			
		||||
unsigned int*
 | 
			
		||||
magic_packet(unsigned int *mac){
 | 
			
		||||
	size_t i;
 | 
			
		||||
	size_t j;
 | 
			
		||||
	int *retval;
 | 
			
		||||
 | 
			
		||||
	if((retval = malloc(sizeof(unsigned int) * 6 + 6*16)) == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	for(i = 0; i < 6; ++i)
 | 
			
		||||
		retval[i] = 255;
 | 
			
		||||
 | 
			
		||||
	for(i = 1; i < 16; ++i)
 | 
			
		||||
		for(j = 0; j < 6; ++j)
 | 
			
		||||
			retval[i*j] = mac[j];
 | 
			
		||||
 | 
			
		||||
	return retval; /* must be freed */
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								lib/libwakeonlan.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								lib/libwakeonlan.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
unsigned int *magic_packet(unsigned int *mac);
 | 
			
		||||
							
								
								
									
										7
									
								
								lib/put.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								lib/put.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
/* A similar function appeared in the original ed(1). This was written clean as
 | 
			
		||||
 * the original is no longer proprietary but now still encumbered by "BSD-like
 | 
			
		||||
 * licensing" (Wikipedia). */
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
putd(int l, int d){
 | 
			
		||||
	
 | 
			
		||||
							
								
								
									
										6
									
								
								lib/test.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								lib/test.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include "banned.h"
 | 
			
		||||
int main(){
 | 
			
		||||
	int *a, *b;
 | 
			
		||||
	strcat(a, b);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								lib/xml.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								lib/xml.h
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
/* There's already an excellent and popular XML library, libxml2, that
 | 
			
		||||
 * accomplishes what this does but better. Use that instead. */
 | 
			
		||||
 | 
			
		||||
#define XML_LEFT_BRACKET '<'
 | 
			
		||||
#define XML_RIGHT_BRACKET '>'
 | 
			
		||||
#define XML_FORWARD_SLASH '/'
 | 
			
		||||
 | 
			
		||||
struct XMLAttribute{
 | 
			
		||||
	char *name;
 | 
			
		||||
	char *content;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct XMLDoc{
 | 
			
		||||
	struct XMLNode **nodes;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct XMLNode{
 | 
			
		||||
	char *name;
 | 
			
		||||
	char *content;
 | 
			
		||||
	union{
 | 
			
		||||
		struct XMLDoc *doc;
 | 
			
		||||
		struct XMLNode *node;
 | 
			
		||||
	}parent;
 | 
			
		||||
	enum{
 | 
			
		||||
		XML_PARENT_IS_DOC = 0,
 | 
			
		||||
		XML_PARENT_IS_NODE = 1
 | 
			
		||||
	}parent_type;
 | 
			
		||||
	struct XMLAttribute **attributes;
 | 
			
		||||
	struct XMLNode **children;
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user