summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergiu Ivanov <unlimitedscolobb@gmail.com>2009-01-22 21:16:49 +0200
committerSergiu Ivanov <unlimitedscolobb@gmail.com>2009-01-22 21:16:49 +0200
commit65360480a9540e3ed6cfdbc42a3a66c8b08b73dc (patch)
treeb34379878c363aaf6a40d9a6510c48ed0ba2ed50
parent439bd02eb00358b50e2d5123ae27e839d8f1a8a6 (diff)
Added the routines for parsing magic syntax
Now nsmux has two special routines for parsing the special ``,,'' syntax: magic_find_sep and magic_unescape. The reason for their separate existence is that the magic ``,,'' is allowed to be escaped in the following way ``,,,'' and nsmux must be able to react correspondingly to such syntax.
-rw-r--r--magic.c82
-rw-r--r--magic.h39
-rw-r--r--nsmux.c1
-rw-r--r--options.h2
4 files changed, 124 insertions, 0 deletions
diff --git a/magic.c b/magic.c
new file mode 100644
index 000000000..e50eda169
--- /dev/null
+++ b/magic.c
@@ -0,0 +1,82 @@
+/*---------------------------------------------------------------------------*/
+/*magic.h*/
+/*---------------------------------------------------------------------------*/
+/*Declaration of functions for handling the magic syntax.*/
+/*---------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005, 2008 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+#include <string.h>
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+#include "magic.h"
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+/*---------Functions---------------------------------------------------------*/
+/*Locates the first unescaped magic separator in the supplied file
+ name. Returns NULL in case it finds nothing.*/
+char * magic_find_sep (const char * name)
+{
+ /*The position of the separator */
+ char * sep = NULL;
+
+ /*Go through all occurrences of the separator sequence */
+ for (sep = strstr (name, ",,"); sep; sep = strstr (sep, ",,"))
+ {
+ /*if the current separator is not escaped, stop */
+ if (sep[2] != ',')
+ break;
+
+ sep += 2;
+ }
+
+ return sep;
+} /*magic_process_find_sep */
+
+/*---------------------------------------------------------------------------*/
+/*Unescapes escaped separators in the substring of the file name
+ starting at `name` of length `sz`.*/
+void magic_unescape (char * name, int sz)
+{
+ /*A pointer for string operations */
+ char * str = NULL;
+
+ /*The position of the escaped separator */
+ char * esc = NULL;
+
+ /*Go through all occurrences of the separator sequence. Note that we
+ would like the whole separator to be enclosed in the substring of
+ length `sz`, hence the +2. */
+ for
+ (
+ esc = strstr (name, ",,,"); esc && (esc - name + 2 < sz);
+ esc = strstr (esc, ",,,")
+ )
+ {
+ /*we've found and escaped separator; remove the escaping comma
+ from the string */
+ for (str = ++esc; *str; str[-1] = *str, ++str);
+ str[-1] = 0;
+ --sz;
+ }
+} /*magic_unescape */
+/*---------------------------------------------------------------------------*/
diff --git a/magic.h b/magic.h
new file mode 100644
index 000000000..0e97f5b2b
--- /dev/null
+++ b/magic.h
@@ -0,0 +1,39 @@
+/*---------------------------------------------------------------------------*/
+/*magic.h*/
+/*---------------------------------------------------------------------------*/
+/*Declaration of functions for handling the magic syntax.*/
+/*---------------------------------------------------------------------------*/
+/*Copyright (C) 2001, 2002, 2005, 2008 Free Software Foundation, Inc.
+ Written by Sergiu Ivanov <unlimitedscolobb@gmail.com>.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or * (at your option) any later version.
+
+ 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.*/
+/*---------------------------------------------------------------------------*/
+#ifndef __MAGIC_H__
+#define __MAGIC_H__
+
+/*---------------------------------------------------------------------------*/
+/*---------Functions---------------------------------------------------------*/
+/*Locates the first unescaped magic separator in the supplied file
+ name. Returns NULL in case it finds nothing.*/
+char * magic_find_sep (const char * name);
+/*---------------------------------------------------------------------------*/
+/*Unescapes escaped separators in the substring of the file name
+ starting at `name` of length `sz`.*/
+void magic_unescape (char * name, int sz);
+/*---------------------------------------------------------------------------*/
+
+/*---------------------------------------------------------------------------*/
+#endif /*__LIB_H__*/
diff --git a/nsmux.c b/nsmux.c
index a1767d357..2400185d7 100644
--- a/nsmux.c
+++ b/nsmux.c
@@ -1586,3 +1586,4 @@ int main (int argc, char **argv)
} /*main */
/*---------------------------------------------------------------------------*/
+
diff --git a/options.h b/options.h
index daa23b4c2..27dc3382c 100644
--- a/options.h
+++ b/options.h
@@ -28,6 +28,8 @@
/*---------------------------------------------------------------------------*/
/*--------Macros-------------------------------------------------------------*/
+/*Command Line Options*/
+
/*The possible short options*/
#define OPT_CACHE_SIZE 'c'
/*---------------------------------------------------------------------------*/