summaryrefslogtreecommitdiff
path: root/mimetypes/locus.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2018-01-03 12:23:44 +0200
committerSergey Poznyakoff <gray@gnu.org>2018-01-03 12:23:52 +0200
commit80ed5e611de0e31eed65ee207f1fd64ad097e6d1 (patch)
tree40979fe5ecadaa3d1351c645ff7988a87218e142 /mimetypes/locus.c
parenta4edd153e4cdf703c98008313743b112274e760f (diff)
downloadfileserv-80ed5e611de0e31eed65ee207f1fd64ad097e6d1.tar.gz
fileserv-80ed5e611de0e31eed65ee207f1fd64ad097e6d1.tar.bz2
Add mimetypes library.
Ported from GNU Mailutils.
Diffstat (limited to 'mimetypes/locus.c')
-rw-r--r--mimetypes/locus.c95
1 files changed, 95 insertions, 0 deletions
diff --git a/mimetypes/locus.c b/mimetypes/locus.c
new file mode 100644
index 0000000..e3eba86
--- /dev/null
+++ b/mimetypes/locus.c
@@ -0,0 +1,95 @@
+/* This file is part of fileserv.
+ Copyright (C) 2017, 2018 Sergey Poznyakoff
+
+ Fileserv 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 3, or (at your option)
+ any later version.
+
+ Fileserv 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 fileserv. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
+#include <errno.h>
+#include "locus.h"
+
+int
+locus_point_set_file (struct locus_point *pt, const char *filename)
+{
+ int rc;
+ char const *ref;
+
+ rc = ident_ref (filename, &ref);
+ if (rc)
+ return rc;
+ ident_deref (pt->file);
+ pt->file = ref;
+ return 0;
+}
+
+void
+locus_point_init (struct locus_point *pt)
+{
+ memset (pt, 0, sizeof *pt);
+}
+
+void
+locus_point_deinit (struct locus_point *pt)
+{
+ ident_deref (pt->file);
+ memset (pt, 0, sizeof *pt);
+}
+
+int
+locus_point_copy (struct locus_point *dest, struct locus_point const *src)
+{
+ int rc = locus_point_set_file (dest, src->file);
+ if (rc == 0)
+ {
+ dest->col = src->col;
+ dest->line = src->line;
+ }
+ return rc;
+}
+
+void
+locus_range_init (struct locus_range *dest)
+{
+ memset (dest, 0, sizeof *dest);
+}
+
+int
+locus_range_copy (struct locus_range *dest, struct locus_range const *src)
+{
+ int rc;
+ struct locus_range tmp = LOCUS_RANGE_INITIALIZER;
+
+ if (!dest)
+ return EINVAL;
+
+ rc = locus_point_copy (&tmp.beg, &src->beg);
+ if (rc == 0)
+ {
+ rc = locus_point_copy (&tmp.end, &src->end);
+ if (rc)
+ locus_point_deinit (&tmp.beg);
+ else
+ {
+ locus_range_deinit (dest);
+ *dest = tmp;
+ }
+ }
+ return rc;
+}
+
+void
+locus_range_deinit (struct locus_range *lr)
+{
+ locus_point_deinit (&lr->beg);
+ locus_point_deinit (&lr->end);
+}

Return to:

Send suggestions and report system problems to the System administrator.