[tor-commits] [torsocks/master] Add utils.c/utils.h with calls from old code
dgoulet at torproject.org
dgoulet at torproject.org
Fri Apr 4 22:40:25 UTC 2014
commit 0e12a3c565e8b5abcfb5ea3657b2fbf94f5cc483
Author: David Goulet <dgoulet at ev0ke.net>
Date: Sun Jun 2 14:25:54 2013 -0400
Add utils.c/utils.h with calls from old code
Signed-off-by: David Goulet <dgoulet at ev0ke.net>
---
src/common/Makefile.am | 2 +-
src/common/config-file.c | 77 ++++-------------------------------
src/common/utils.c | 100 ++++++++++++++++++++++++++++++++++++++++++++++
src/common/utils.h | 28 +++++++++++++
4 files changed, 136 insertions(+), 71 deletions(-)
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
index f23e439..5f325a2 100644
--- a/src/common/Makefile.am
+++ b/src/common/Makefile.am
@@ -3,4 +3,4 @@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/src
AM_CFLAGS = -fno-strict-aliasing
noinst_LTLIBRARIES = libcommon.la
-libcommon_la_SOURCES = log.c log.h config-file.c config-file.h
+libcommon_la_SOURCES = log.c log.h config-file.c config-file.h utils.c utils.h
diff --git a/src/common/config-file.c b/src/common/config-file.c
index a085a19..ad7b683 100644
--- a/src/common/config-file.c
+++ b/src/common/config-file.c
@@ -29,38 +29,11 @@
#include "config-file.h"
#include "log.h"
+#include "utils.h"
/* Global configuration variables. */
static struct config_server_entry *currentcontext = NULL;
-/* This routines breaks up input lines into tokens */
-/* and places these tokens into the array specified */
-/* by tokens */
-static int tokenize(char *line, int arrsize, char *tokens[]) {
- int tokenno = -1;
- int finished = 0;
-
- /* Whitespace is ignored before and after tokens */
- while ((tokenno < (arrsize - 1)) &&
- (line = line + strspn(line, " \t")) &&
- (*line != (char) 0) &&
- (!finished)) {
- tokenno++;
- tokens[tokenno] = line;
- line = line + strcspn(line, " \t");
- *line = (char) 0;
- line++;
-
- /* We ignore everything after a # */
- if (*tokens[tokenno] == '#') {
- finished = 1;
- tokenno--;
- }
- }
-
- return(tokenno + 1);
-}
-
/* Check server entries (and establish defaults) */
static int check_server(struct config_server_entry *server)
{
@@ -117,15 +90,15 @@ int make_config_network_entry(char *value, struct config_network_entry **ent) {
split = buf;
/* Now rip it up */
- ip = strsplit(&separator, &split, "/:");
+ ip = utils_strsplit(&separator, &split, "/:");
if (separator == ':') {
/* We have a start port */
- start_port = strsplit(&separator, &split, "-/");
+ start_port = utils_strsplit(&separator, &split, "-/");
if (separator == '-')
/* We have an end port */
- end_port = strsplit(&separator, &split, "/");
+ end_port = utils_strsplit(&separator, &split, "/");
}
- subnet = strsplit(NULL, &split, " \n");
+ subnet = utils_strsplit(NULL, &split, " \n");
if ((ip == NULL) || (subnet == NULL)) {
/* Network specification not validly constructed */
@@ -258,7 +231,7 @@ static int handle_reaches(int lineno, char *value) {
static int handle_server(struct config_parsed *config, int lineno, char *value) {
char *ip;
- ip = strsplit(NULL, &value, " ");
+ ip = utils_strsplit(NULL, &value, " ");
/* We don't verify this ip/hostname at this stage, */
/* its resolved immediately before use in torsocks.c */
@@ -599,7 +572,7 @@ static int handle_line(struct config_parsed *config, char *line, int lineno)
strncpy(savedline, line, CONFIG_MAXLINE - 1);
savedline[CONFIG_MAXLINE - 1] = (char) 0;
/* Tokenize the input string */
- nowords = tokenize(line, 10, words);
+ nowords = utils_tokenize_ignore_comments(line, 10, words);
/* Set the spare slots to an empty string to simplify */
/* processing */
@@ -731,42 +704,6 @@ int pick_server(struct config_parsed *config, struct config_server_entry **ent,
return(0);
}
-/* This function is very much like strsep, it looks in a string for */
-/* a character from a list of characters, when it finds one it */
-/* replaces it with a \0 and returns the start of the string */
-/* (basically spitting out tokens with arbitrary separators). If no */
-/* match is found the remainder of the string is returned and */
-/* the start pointer is set to be NULL. The difference between */
-/* standard strsep and this function is that this one will */
-/* set *separator to the character separator found if it isn't null */
-char *strsplit(char *separator, char **text, const char *search) {
- unsigned int len;
- char *ret;
-
- ret = *text;
-
- if (*text == NULL) {
- if (separator)
- *separator = '\0';
- return(NULL);
- } else {
- len = strcspn(*text, search);
- if (len == strlen(*text)) {
- if (separator)
- *separator = '\0';
- *text = NULL;
- } else {
- *text = *text + len;
- if (separator)
- *separator = **text;
- **text = '\0';
- *text = *text + 1;
- }
- }
-
- return(ret);
-}
-
/*
* Read and populate the given config parsed data structure.
*
diff --git a/src/common/utils.c b/src/common/utils.c
new file mode 100644
index 0000000..3c537fc
--- /dev/null
+++ b/src/common/utils.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2000-2008 - Shaun Clowes <delius at progsoc.org>
+ * 2008-2011 - Robert Hogan <robert at roberthogan.net>
+ * 2013 - David Goulet <dgoulet at ev0ke.net>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License, version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <string.h>
+
+#include "macros.h"
+#include "utils.h"
+
+/*
+ * This routines breaks up input lines into tokens and places these tokens into
+ * the array specified by tokens
+ *
+ * Return the number of token plus one set in the given array.
+ */
+ATTR_HIDDEN
+int utils_tokenize_ignore_comments(char *line, int arrsize, char **tokens)
+{
+ int tokenno = -1;
+ int finished = 0;
+
+ /* Whitespace is ignored before and after tokens */
+ while ((tokenno < (arrsize - 1)) &&
+ (line = line + strspn(line, " \t")) &&
+ (*line != (char) 0) &&
+ (!finished)) {
+ tokenno++;
+ tokens[tokenno] = line;
+ line = line + strcspn(line, " \t");
+ *line = '\0';
+ line++;
+
+ /* We ignore everything after a # */
+ if (*tokens[tokenno] == '#') {
+ finished = 1;
+ tokenno--;
+ }
+ }
+
+ return tokenno + 1;
+}
+
+/*
+ * This function is very much like strsep, it looks in a string for a character
+ * from a list of characters, when it finds one it replaces it with a \0 and
+ * returns the start of the string (basically spitting out tokens with
+ * arbitrary separators).
+ *
+ * If no match is found the remainder of the string is returned and the start
+ * pointer is set to be NULL. The difference between standard strsep and this
+ * function is that this one will set separator to the character separator
+ * found if it isn't NULL.
+ */
+ATTR_HIDDEN
+char *utils_strsplit(char *separator, char **text, const char *search)
+{
+ unsigned int len;
+ char *ret;
+
+ ret = *text;
+
+ if (*text == NULL) {
+ if (separator) {
+ *separator = '\0';
+ }
+ return NULL;
+ }
+
+ len = strcspn(*text, search);
+ if (len == strlen(*text)) {
+ if (separator) {
+ *separator = '\0';
+ }
+ *text = NULL;
+ } else {
+ *text = *text + len;
+ if (separator) {
+ *separator = **text;
+ }
+ **text = '\0';
+ *text = *text + 1;
+ }
+
+ return ret;
+}
diff --git a/src/common/utils.h b/src/common/utils.h
new file mode 100644
index 0000000..26a5092
--- /dev/null
+++ b/src/common/utils.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2000-2008 - Shaun Clowes <delius at progsoc.org>
+ * 2008-2011 - Robert Hogan <robert at roberthogan.net>
+ * 2013 - David Goulet <dgoulet at ev0ke.net>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License, version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc., 51
+ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef TORSOCKS_UTILS_H
+#define TORSOCKS_UTILS_H
+
+#include <netinet/in.h>
+
+char *utils_strsplit(char *separator, char **text, const char *search);
+int utils_tokenize_ignore_comments(char *line, int arrsize, char **tokens);
+
+#endif /* TORSOCKS_UTILS_H */
More information about the tor-commits
mailing list