/* This file is part of GNU Pies Copyright (C) 2015, 2017 Sergey Poznyakoff GNU Pies 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. GNU Pies 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 GNU Pies. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "libpies.h" #include "grecsasrt.h" int assert_grecs_value_type (grecs_locus_t *locus, const grecs_value_t *value, int type) { if (GRECS_VALUE_EMPTY_P (value)) { grecs_error (locus, 0, _("expected %s"), grecs_data_type_string (type)); return 1; } if (value->type != type) { grecs_error (locus, 0, _("expected %s, but found %s"), grecs_data_type_string (type), grecs_data_type_string (value->type)); return 1; } return 0; } int assert_scalar_stmt (grecs_locus_t *locus, enum grecs_callback_command cmd) { if (cmd != grecs_callback_set_value) { grecs_error (locus, 0, _("unexpected block statement")); return 1; } return 0; } int conf_callback_url (enum grecs_callback_command cmd, grecs_locus_t *locus, void *varptr, grecs_value_t *value, void *cb_data) { struct pies_url *url; if (assert_scalar_stmt (locus, cmd) || assert_grecs_value_type (locus, value, GRECS_TYPE_STRING)) return 1; if (pies_url_create (&url, value->v.string)) { grecs_error (locus, 0, _("%s: cannot create URL: %s"), value->v.string, strerror (errno)); return 0; } if (varptr) *(struct pies_url **) varptr = url; else pies_url_destroy (&url); return 0; }