From 915e6904a0f70bdd6629fe463e7711cdfb2cb1dd Mon Sep 17 00:00:00 2001 From: Kibum Kim Date: Sat, 7 Jan 2012 00:48:00 +0900 Subject: [PATCH] Git init --- LICENSE | 26 ++ Makefile.am | 36 +++ autogen.sh | 13 + configure.ac | 75 +++++ debian/changelog | 8 + debian/compat | 1 + debian/control | 20 ++ debian/dirs | 0 debian/docs | 0 debian/libiri-dev.install.in | 2 + debian/libiri.install.in | 1 + debian/rules | 125 +++++++++ include/Makefile.am | 31 +++ include/cvsignore | 11 + include/iri.h | 68 +++++ iri-config/Makefile.am | 35 +++ iri-config/cvsignore | 14 + iri-config/iri-config.c.in | 111 ++++++++ libiri.pc.in | 12 + libiri/Makefile.am | 37 +++ libiri/cvsignore | 11 + libiri/destory.c | 47 ++++ libiri/destroy.c | 47 ++++ libiri/dup.c | 83 ++++++ libiri/p_libiri.h | 279 +++++++++++++++++++ libiri/parse.c | 647 +++++++++++++++++++++++++++++++++++++++++++ tests/Makefile.am | 34 +++ tests/cvsignore | 13 + tests/iridump.c | 69 +++++ 29 files changed, 1856 insertions(+) create mode 100644 LICENSE create mode 100644 Makefile.am create mode 100755 autogen.sh create mode 100755 configure.ac create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/dirs create mode 100644 debian/docs create mode 100644 debian/libiri-dev.install.in create mode 100644 debian/libiri.install.in create mode 100755 debian/rules create mode 100644 include/Makefile.am create mode 100644 include/cvsignore create mode 100644 include/iri.h create mode 100644 iri-config/Makefile.am create mode 100644 iri-config/cvsignore create mode 100644 iri-config/iri-config.c.in create mode 100644 libiri.pc.in create mode 100644 libiri/Makefile.am create mode 100644 libiri/cvsignore create mode 100644 libiri/destory.c create mode 100644 libiri/destroy.c create mode 100644 libiri/dup.c create mode 100644 libiri/p_libiri.h create mode 100644 libiri/parse.c create mode 100644 tests/Makefile.am create mode 100644 tests/cvsignore create mode 100644 tests/iridump.c diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..969fa67 --- /dev/null +++ b/LICENSE @@ -0,0 +1,26 @@ +@(#) $Id$ + +Copyright (c) 2005, 2008 Mo McRoberts. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The names of the author(s) of this software may not be used to endorse + or promote products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..15b242a --- /dev/null +++ b/Makefile.am @@ -0,0 +1,36 @@ +## +## libiri: An IRI/URI/URL parsing library +## @(#) $Id$ +## + +## Copyright (c) 2008 Mo McRoberts. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions +## are met: +## 1. Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## 3. The names of the author(s) of this software may not be used to endorse +## or promote products derived from this software without specific prior +## written permission. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +## AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +## AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +SUBDIRS = iri-config include libiri tests + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libiri.pc + +EXTRA_DIST = LICENSE diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..c75e9f0 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,13 @@ +#! /bin/sh +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. +cd $srcdir + +mkdir -p autotools +libtoolize --force || exit 1 +aclocal -I autotools || exit 1 +autoheader || exit 1 +automake --add-missing --copy || exit 1 +autoconf || exit +configure --prefix=$PREFIX +$srcdir/configure $AUTOGEN_CONFIGURE_ARGS "$@" || exit $? diff --git a/configure.ac b/configure.ac new file mode 100755 index 0000000..f784e78 --- /dev/null +++ b/configure.ac @@ -0,0 +1,75 @@ +dnl @(#) $Id$ + +dnl Copyright (c) 2005, 2008 Mo McRoberts. +dnl +dnl Redistribution and use in source and binary forms, with or without +dnl modification, are permitted provided that the following conditions +dnl are met: +dnl 1. Redistributions of source code must retain the above copyright +dnl notice, this list of conditions and the following disclaimer. +dnl 2. Redistributions in binary form must reproduce the above copyright +dnl notice, this list of conditions and the following disclaimer in the +dnl documentation and/or other materials provided with the distribution. +dnl 3. The names of the author(s) of this software may not be used to endorse +dnl or promote products derived from this software without specific prior +dnl written permission. +dnl +dnl THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +dnl INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +dnl AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +dnl AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +dnl TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +dnl PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +dnl LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +dnl NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +dnl SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +AC_INIT(libiri, 2.0) +#AC_CONFIG_SRCDIR([include/iri.h]) +AC_CONFIG_SRCDIR([libiri.pc.in]) +AM_INIT_AUTOMAKE([foreign]) +AM_MAINTAINER_MODE + +CPPFLAGS="$CPPFLAGS -W -Wall -D_REENTRANT -I\${top_srcdir}/include" +export CPPFLAGS + +CFLAGS="$CFLAGS -g -O0" +export CFLAGS + +AC_PROG_CC +AC_PROG_LIBTOOL + +spfx="${prefix}" +sepfx="${exec_prefix}" +test x"${prefix}" = x"NONE" && prefix="${ac_default_prefix}" +test x"${exec_prefix}" = x"NONE" && exec_prefix="${prefix}" + +IRI_VERSION="${VERSION}" +AC_SUBST([IRI_VERSION]) + +IRI_CFLAGS="-I`eval echo $includedir`" +AC_SUBST([IRI_CFLAGS]) + +IRI_INCLUDES="-I`eval echo $includedir`" +AC_SUBST([IRI_INCLUDES]) + +IRI_LIBS="-L`eval echo $libdir` -liri" +AC_SUBST([IRI_LIBS]) + +prefix="${spfx}" +exec_prefix="${sepfx}" + +AC_CONFIG_HEADER([config.h]) + +AC_CONFIG_FILES([Makefile +include/Makefile +libiri/Makefile +iri-config/iri-config.c +iri-config/Makefile +tests/Makefile +libiri.pc +]) + +AC_OUTPUT + diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..a5b4738 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,8 @@ +libiri (1.1) unstable; urgency=low + + * Init changelog + + * Git : pkgs/l/libiri + * Tag : libiri_1.1 + + -- Yunchan Cho Wed, 07 Dec 2011 12:36:14 +0900 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..3475c08 --- /dev/null +++ b/debian/control @@ -0,0 +1,20 @@ +Source: libiri +Section: net +Priority: extra +Maintainer: Yunchan Cho +Uploaders: Yunchan Cho +Build-Depends: debhelper (>= 5), autotools-dev, pkg-config +Standards-Version: 0.1.0 + +Package: libiri +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: libiri +Description: a simple library for parsing Internationalized Resource Identifiers (IRIs) + +Package: libiri-dev +Section: libdevel +Architecture: any +Depends: libiri (= ${Source-Version}) +Description: a simple library for parsing Internationalized Resource Identifiers (IRIs) diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..e69de29 diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..e69de29 diff --git a/debian/libiri-dev.install.in b/debian/libiri-dev.install.in new file mode 100644 index 0000000..0f2a4da --- /dev/null +++ b/debian/libiri-dev.install.in @@ -0,0 +1,2 @@ +@PREFIX@/include/* +@PREFIX@/lib/pkgconfig/*.pc diff --git a/debian/libiri.install.in b/debian/libiri.install.in new file mode 100644 index 0000000..bf766f0 --- /dev/null +++ b/debian/libiri.install.in @@ -0,0 +1 @@ +@PREFIX@/lib/*.so* diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..f12218c --- /dev/null +++ b/debian/rules @@ -0,0 +1,125 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +CFLAGS ?= -Wall -g +LDFLAGS ?= +PREFIX ?= /usr +DATADIR ?= /opt + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed + +config.status: + dh_testdir + # Add here commands to configure the package. + CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" ./autogen.sh --prefix=$(PREFIX) + +build: build-stamp + +build-stamp: config.status + dh_testdir +# mkdir -p autotools +# libtoolize --force || exit 1 +# aclocal -I autotools || exit 1 +# autoheader || exit 1 +# automake --add-missing --copy || exit 1 +# autoconf || exit 1 + + # Add here commands to compile the package. + $(MAKE) + #docbook-to-man debian/ncurses.sgml > ncurses.1 + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + cat $$f > $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ + sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ + done + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + -$(MAKE) distclean +ifneq "$(wildcard /usr/share/misc/config.sub)" "" + cp -f /usr/share/misc/config.sub config.sub +endif +ifneq "$(wildcard /usr/share/misc/config.guess)" "" + cp -f /usr/share/misc/config.guess config.guess +endif + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/ncurses. + $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + dh_installchangelogs + dh_installdocs + dh_installexamples + dh_install --sourcedir=debian/tmp +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/include/Makefile.am b/include/Makefile.am new file mode 100644 index 0000000..369aa96 --- /dev/null +++ b/include/Makefile.am @@ -0,0 +1,31 @@ +## +## libiri: An IRI/URI/URL parsing library +## @(#) $Id$ +## + +## Copyright (c) 2008 Mo McRoberts. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions +## are met: +## 1. Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## 3. The names of the author(s) of this software may not be used to endorse +## or promote products derived from this software without specific prior +## written permission. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +## AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +## AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +include_HEADERS = iri.h diff --git a/include/cvsignore b/include/cvsignore new file mode 100644 index 0000000..33ea420 --- /dev/null +++ b/include/cvsignore @@ -0,0 +1,11 @@ +.deps +.libs +Makefile +Makefile.in +*.la +*.lo +*.so +*.a +*.dll +*.exe +*.o diff --git a/include/iri.h b/include/iri.h new file mode 100644 index 0000000..484fcc8 --- /dev/null +++ b/include/iri.h @@ -0,0 +1,68 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef IRI_H_ +# define IRI_H_ 1 + +# if !defined(LIBIRI_INTERNAL) +typedef struct iri_struct iri_t; +# endif + +struct iri_struct +{ + const char *display; + const char *scheme; + const char *user; + const char *auth; + const char *password; + const char *host; + int port; + const char *path; + const char *query; + const char *anchor; + const char **qparams; + const char **schemelist; + size_t nschemes; +}; + +# undef EXTERNC_ +# if defined(__cplusplus) +# define EXTERNC_ extern "C" +# else +# define EXTERNC_ extern +# endif + +EXTERNC_ iri_t *iri_parse(const char *src); +EXTERNC_ void iri_destroy(iri_t *iri); +EXTERNC_ iri_t *iri_dup(iri_t *iri); + +#endif /* !IRI_H_ */ diff --git a/iri-config/Makefile.am b/iri-config/Makefile.am new file mode 100644 index 0000000..bb71788 --- /dev/null +++ b/iri-config/Makefile.am @@ -0,0 +1,35 @@ +## +## libiri: An IRI/URI/URL parsing library +## @(#) $Id$ +## + +## Copyright (c) 2008 Mo McRoberts. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions +## are met: +## 1. Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## 3. The names of the author(s) of this software may not be used to endorse +## or promote products derived from this software without specific prior +## written permission. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +## AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +## AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +EXTRA_DIST = iri-config.c.in + +bin_PROGRAMS = iri-config + +iri_config_SOURCES = iri-config.c diff --git a/iri-config/cvsignore b/iri-config/cvsignore new file mode 100644 index 0000000..76c9f5a --- /dev/null +++ b/iri-config/cvsignore @@ -0,0 +1,14 @@ +.deps +.libs +Makefile +Makefile.in +*.la +*.lo +*.so +*.a +*.dll +*.exe +*.o +iri-config +iri-config.c + diff --git a/iri-config/iri-config.c.in b/iri-config/iri-config.c.in new file mode 100644 index 0000000..33593ce --- /dev/null +++ b/iri-config/iri-config.c.in @@ -0,0 +1,111 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include + +static struct +{ + const char *key; + const char *value; +} pairs[] = +{ + { "cflags", "@IRI_CFLAGS@" }, + { "include", "@IRI_INCLUDES@" }, + { "libs", "@IRI_LIBS@" }, + { "version", "@IRI_VERSION@" }, + { NULL, NULL } +}; + +static void +usage(int status) +{ + int d; + + puts("Usage: @bindir@/iri-config [OPTIONS]"); + puts("Options:"); + for(d = 0; NULL != pairs[d].key; d++) + { + printf("\t--%-14s [%s]\n", pairs[d].key, pairs[d].value); + } + exit(status); +} + +int +main(int argc, char **argv) +{ + int c, d; + + if(argc < 2) + { + usage(EXIT_SUCCESS); + } + for(c = 1 ; c < argc; c++) + { + if(argv[c][0] == '-' && argv[c][1] == '-') + { + for(d = 0; NULL != pairs[d].key; d++) + { + if(0 == strcmp(&(argv[c][2]), pairs[d].key)) + { + break; + } + } + if(NULL == pairs[d].key) + { + usage(EXIT_FAILURE); + } + } + else + { + usage(EXIT_FAILURE); + } + } + for(c = 1 ; c < argc; c++) + { + for(d = 0; NULL != pairs[d].key; d++) + { + if(0 == strcmp(&(argv[c][2]), pairs[d].key)) + { + printf("%s\n", pairs[d].value); + break; + } + } + } + return 0; +} diff --git a/libiri.pc.in b/libiri.pc.in new file mode 100644 index 0000000..9949f4a --- /dev/null +++ b/libiri.pc.in @@ -0,0 +1,12 @@ +# Package Information for pkg-config + +prefix=/usr +exec_prefix=${prefix} +libdir=${prefix}/lib +includedir=${prefix}/include + +Name: libiri +Description: IRI - a simple library for parsing Internationalized Resource Identifiers +Version: 1.0 +Libs: -L${libdir} -liri +Cflags: -I${includedir} diff --git a/libiri/Makefile.am b/libiri/Makefile.am new file mode 100644 index 0000000..3763392 --- /dev/null +++ b/libiri/Makefile.am @@ -0,0 +1,37 @@ +## @(#) $Id$ + +## Copyright (c) 2008 Mo McRoberts. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions +## are met: +## 1. Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## 3. The names of the author(s) of this software may not be used to endorse +## or promote products derived from this software without specific prior +## written permission. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +## AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +## AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +lib_LTLIBRARIES = libiri.la + +libiri_la_LDFLAGS = -avoid-version + +libiri_la_CPPFLAGS = -DLIBIRI_INTERNAL=1 + +libiri_la_SOURCES = \ + p_libiri.h \ + parse.c destroy.c dup.c + diff --git a/libiri/cvsignore b/libiri/cvsignore new file mode 100644 index 0000000..33ea420 --- /dev/null +++ b/libiri/cvsignore @@ -0,0 +1,11 @@ +.deps +.libs +Makefile +Makefile.in +*.la +*.lo +*.so +*.a +*.dll +*.exe +*.o diff --git a/libiri/destory.c b/libiri/destory.c new file mode 100644 index 0000000..9b6cf5a --- /dev/null +++ b/libiri/destory.c @@ -0,0 +1,47 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "p_libiri.h" + +void +iri_destroy(iri_t *iri) +{ + if(NULL != iri) + { + free(iri->base); + free(iri); + } +} \ No newline at end of file diff --git a/libiri/destroy.c b/libiri/destroy.c new file mode 100644 index 0000000..ff2533d --- /dev/null +++ b/libiri/destroy.c @@ -0,0 +1,47 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "p_libiri.h" + +void +iri_destroy(iri_t *iri) +{ + if(NULL != iri) + { + free(iri->base); + free(iri); + } +} diff --git a/libiri/dup.c b/libiri/dup.c new file mode 100644 index 0000000..7ce1eb7 --- /dev/null +++ b/libiri/dup.c @@ -0,0 +1,83 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "p_libiri.h" + +static inline void +iri__dupcopy(const char **dest, const char *src, const char *srcbase, size_t buflen, const char *destbase) +{ + if(NULL == src) + { + *dest = NULL; + } + else if(src >= srcbase && src <= srcbase + buflen) + { + *dest = destbase + (src - srcbase); + } + else + { + *dest = strdup(src); + } +} + +iri_t * +iri_dup(iri_t *iri) +{ + iri_t *p; + + if(NULL == (p = (iri_t *) calloc(1, sizeof(iri_t)))) + { + return NULL; + } + if(NULL == (p->base = (char *) calloc(1, iri->nbytes))) + { + free(p); + return NULL; + } + p->nbytes = iri->nbytes; + p->iri.port = iri->iri.port; + memcpy(p->base, iri->base, p->nbytes); + iri__dupcopy(&(p->iri.display), iri->iri.display, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.scheme), iri->iri.scheme, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.user), iri->iri.user, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.auth), iri->iri.auth, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.password), iri->iri.password, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.host), iri->iri.host, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.path), iri->iri.path, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.query), iri->iri.query, iri->base, iri->nbytes, p->base); + iri__dupcopy(&(p->iri.anchor), iri->iri.anchor, iri->base, iri->nbytes, p->base); + return p; +} diff --git a/libiri/p_libiri.h b/libiri/p_libiri.h new file mode 100644 index 0000000..b5bdfa0 --- /dev/null +++ b/libiri/p_libiri.h @@ -0,0 +1,279 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + + +/* + +The following code was added by Samsung Electronics. + +--- a/libiri/p_libiri.h ++++ b/libiri/p_libiri.h +@@ -33,6 +33,8 @@ + #ifndef P_LIBIRI_H_ + # define P_LIBIRI_H_ 1 + ++#define LIBIRI_INTERNAL ++ + #include + + +License of the above code is Apache License + + + Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +*/ + + +#ifndef P_LIBIRI_H_ +# define P_LIBIRI_H_ 1 + +#define LIBIRI_INTERNAL + +#include +#include +#include + +typedef struct iri_internal_struct iri_t; + +#include "iri.h" + +struct iri_internal_struct +{ + struct iri_struct iri; + void *base; + size_t nbytes; +}; + +#endif /* !P_LIBIRI_H_ */ diff --git a/libiri/parse.c b/libiri/parse.c new file mode 100644 index 0000000..fa881e4 --- /dev/null +++ b/libiri/parse.c @@ -0,0 +1,647 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + +The following code was added by Samsung Electronics. + +--- a/libiri/parse.c ++++ b/libiri/parse.c +@@ -59,6 +59,7 @@ iri__hexnibble(char c) + { + return c - 'a' + 10; + } ++ return 0; + } + + static inline const char * +@@ -130,6 +131,7 @@ iri__allocbuf(const char *src, size_t *len) + *len = (src - c) + 1 + sc + ((sc + 1) * (sizeof(char *) + 7)); + *len += (7 * 11); + } ++ *len = 9999; // FIXME: DIRTY HACK THAT USUALLY WORKS... UNTIL IRI IS NOT TO + return (char *) calloc(1, *len); + } + + + +License of the above code is Apache License + + + Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +*/ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include + +#include "p_libiri.h" + +#undef ALIGNMENT +#define ALIGNMENT 8 +#undef ALIGN +#define _ALIGN(x) ((((x)+(ALIGNMENT-1))&~(ALIGNMENT-1))) +#define ALIGN(x) (char *) _ALIGN((size_t) x) + +static inline int +iri__hexnibble(char c) +{ + if(c >= '0' && c <= '9') + { + return c - '0'; + } + if(c >= 'A' && c <= 'F') + { + return c - 'A' + 10; + } + if(c >= 'a' && c <= 'f') + { + return c - 'a' + 10; + } + return 0; +} + +static inline const char * +iri__copychar(char **dest, const char *src) +{ + **dest = *src; + (*dest)++; + src++; + return src; +} + +/* TODO: Punycode decoding for the host part */ +static inline const char * +iri__copychar_decode(char **dest, const char *src, int convert_space) +{ + unsigned char *p = (unsigned char *) (*dest); + + if(1 == convert_space && '+' == *src) + { + **dest = ' '; + } + else if('%' == *src) + { + if(0 == isxdigit(src[1]) || 0 == isxdigit(src[2])) + { + /* TODO: Deal with %u non-standard encoding - be liberal in + * what you accept, etc. + */ + **dest = '%'; + } + else + { + *p = (iri__hexnibble(src[1]) << 4) | iri__hexnibble(src[2]); + src += 2; + } + } + else + { + **dest = *src; + } + src++; + (*dest)++; + return src; +} + +static inline char * +iri__allocbuf(const char *src, size_t *len) +{ + size_t sc; + const char *p, *c; + + /* Calculate the size of the buffer required to hold a decoded version of + * src, including enough breathing space for null bytes. + */ + /* XXX: This is way too much; we need to actually count it */ + *len = (strlen(src) * 4) + 16; + /* Determine how much space we need for the scheme list */ + if(NULL != (c = strchr(src, ':'))) + { + sc = 1; + for(p = src; p < c; p++) + { + if(*p == '+') + { + sc++; + } + } + /* Ensure we can align each element on an 8-byte boundary */ + *len = (src - c) + 1 + sc + ((sc + 1) * (sizeof(char *) + 7)); + *len += (7 * 11); + } + *len = 9999; // FIXME: DIRTY HACK THAT USUALLY WORKS... UNTIL IRI IS NOT TOO LONG + return (char *) calloc(1, *len); +} + +iri_t * +iri_parse(const char *src) +{ + iri_t *p; + char *bufstart, *endp, *bufp, **sl; + const char *at, *colon, *slash, *t; + size_t buflen, sc, cp; + + if(NULL == (p = (iri_t *) calloc(1, sizeof(iri_t)))) + { + return NULL; + } + if(NULL == (bufstart = iri__allocbuf(src, &buflen))) + { + free(p); + return NULL; + } + p->base = bufp = bufstart; + p->nbytes = buflen; + at = strchr(src, '@'); + slash = strchr(src, '/'); + colon = strchr(src, ':'); + if(slash && colon && slash < colon) + { + /* We can disregard the colon if a slash appears before it */ + colon = NULL; + } + if(colon && !at) + { + /* Definitely a scheme */ + bufp = ALIGN(bufp); + p->iri.scheme = bufp; + while(*src && *src != ':') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + src++; + /* src[0-1] SHOULD == '/' */ + if(src[0] == '/') src++; + if(src[0] == '/') src++; + } + else if(colon && at && colon < at) + { + fprintf(stderr, "Colon occurs before at\n"); + /* This could be scheme://user[;auth][:password]@host or [scheme:]user[;auth][:password]@host (urgh) */ + if(colon[1] == '/' && colon[2] == '/' && colon[3] != '/') + { + bufp = ALIGN(bufp); + p->iri.scheme = bufp; + while(*src && *src != ':') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + src++; + /* src[0-1] SHOULD == '/' */ + for(; *src == '/'; src++); + bufp = ALIGN(bufp); + p->iri.user = bufp; + fprintf(stderr, "Found user\n"); + } + else + { + fprintf(stderr, "Matched scheme\n"); + bufp = ALIGN(bufp); + p->iri.scheme = bufp; + } + while(*src && *src != ':' && *src != '@' && *src != ';') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + if(*src == ';') + { + /* Following authentication parameters */ + src++; + bufp = ALIGN(bufp); + p->iri.auth = bufp; + while(*src && *src != ':' && *src != '@') + { + /* Don't decode, so it can be extracted properly */ + src = iri__copychar(&bufp, src); + } + *bufp = 0; + bufp++; + } + if(*src == ':') + { + /* Following password data */ + src++; + bufp = ALIGN(bufp); + p->iri.password = bufp; + while(*src && *src != ':' && *src != '@') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + if(*src == ':') + { + src++; + /* It was actually scheme:user:auth@host */ + p->iri.user = p->iri.auth; + bufp = ALIGN(bufp); + p->iri.password = bufp; + while(*src && *src != '@') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + } + } + if(!*src) + { + /* No host part */ + return p; + } + if(*src == '@') + { + src++; + } + } + else if(at) + { + /* user[;auth]@host[/path...] */ + bufp = ALIGN(bufp); + p->iri.user = bufp; + while(*src != '@' && *src != ';') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + if(*src == ';') + { + src++; + bufp = ALIGN(bufp); + p->iri.auth = bufp; + while(*src && *src != '@') + { + /* Don't decode, so it can be extracted properly */ + src = iri__copychar(&bufp, src); + } + *bufp = 0; + bufp++; + } + else + { + src++; + } + } + if(NULL != p->iri.scheme) + { + sc = 1; + for(t = p->iri.scheme; *t; t++) + { + if('+' == *t) + { + sc++; + } + } + bufp = ALIGN(bufp); + sl = (char **) (void *) bufp; + bufp += (sc + 1) * sizeof(char *); + sc = 0; + cp = 0; + bufp = ALIGN(bufp); + sl[0] = bufp; + for(t = p->iri.scheme; *t; t++) + { + if('+' == *t) + { + if(sl[sc][0]) + { + sl[sc][cp] = 0; + bufp++; + sc++; + bufp = ALIGN(bufp); + sl[sc] = bufp; + cp = 0; + } + } + else + { + sl[sc][cp] = *t; + bufp++; + cp++; + } + } + if(sl[sc][0]) + { + sl[sc][cp] = 0; + sc++; + bufp++; + } + sl[sc] = NULL; + p->iri.schemelist = (const char **) sl; + p->iri.nschemes = sc; + bufp++; + } + bufp = ALIGN(bufp); + p->iri.host = bufp; + while(*src && *src != ':' && *src != '/' && *src != '?' && *src != '#') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + if(*src == ':') + { + /* Port part */ + src++; + endp = (char *) src; + p->iri.port = strtol(src, &endp, 10); + src = endp; + } + if(*src == '/') + { + bufp = ALIGN(bufp); + p->iri.path = bufp; + while(*src && *src != '?' && *src != '#') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + } + if(*src == '?') + { + bufp = ALIGN(bufp); + p->iri.query = bufp; + src++; + while(*src && *src != '#') + { + /* Don't actually decode the query itself, otherwise it + * can't be reliably split */ + src = iri__copychar(&bufp, src); + } + *bufp = 0; + bufp++; + } + if(*src == '#') + { + bufp = ALIGN(bufp); + p->iri.anchor = bufp; + while(*src) + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + } + if(*src) + { + /* Still stuff left? It must be a path... of sorts */ + bufp = ALIGN(bufp); + p->iri.path = bufp; + while(*src && *src != '?' && *src != '#') + { + src = iri__copychar_decode(&bufp, src, 0); + } + *bufp = 0; + bufp++; + } + return p; +} + + + + + diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 0000000..63d2b30 --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,34 @@ +## +## libiri: An IRI/URI/URL parsing library +## @(#) $Id$ +## + +## Copyright (c) 2008 Mo McRoberts. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions +## are met: +## 1. Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## 3. The names of the author(s) of this software may not be used to endorse +## or promote products derived from this software without specific prior +## written permission. +## +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +## AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +## AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +noinst_PROGRAMS = iridump + +iridump_SOURCES = iridump.c +iridump_LDADD = ../libiri/libiri.la diff --git a/tests/cvsignore b/tests/cvsignore new file mode 100644 index 0000000..4c55c0d --- /dev/null +++ b/tests/cvsignore @@ -0,0 +1,13 @@ +.deps +.libs +Makefile +Makefile.in +*.la +*.lo +*.so +*.a +*.dll +*.exe +*.o +iridump + diff --git a/tests/iridump.c b/tests/iridump.c new file mode 100644 index 0000000..809d3ba --- /dev/null +++ b/tests/iridump.c @@ -0,0 +1,69 @@ +/* + * libiri: An IRI/URI/URL parsing library + * @(#) $Id$ + */ + +/* + * Copyright (c) 2005, 2008 Mo McRoberts. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The names of the author(s) of this software may not be used to endorse + * or promote products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * AUTHORS OF THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include + +#include "iri.h" + +int +main(int argc, char **argv) +{ + iri_t *iri; + size_t c; + + if(argc != 2) + { + fprintf(stderr, "Usage: %s IRI\n", argv[0]); + exit(EXIT_FAILURE); + } + iri = iri_parse(argv[1]); + printf(" scheme: %s\n", iri->scheme); + for(c = 0; c < iri->nschemes; c++) + { + printf("%8d: %s\n", (int) c, iri->schemelist[c]); + } + printf(" user: %s\n", iri->user); + printf(" auth: %s\n", iri->auth); + printf("password: %s\n", iri->password); + printf(" host: %s\n", iri->host); + printf(" port: %d\n", iri->port); + printf(" path: %s\n", iri->path); + printf(" query: %s\n", iri->query); + printf(" anchor: %s\n", iri->anchor); + return 0; +} -- 2.7.4