Skip to content
Snippets Groups Projects
  • Jonathan Schöbel's avatar
    6a592b8d
    error handling added · 6a592b8d
    Jonathan Schöbel authored
    Error handling is done by passing an Error structure as inout parameter
    to functions that can fail on runtime predictable. This parameter is
    always the last one. Methods, where this is not the case, doesn't have an
    error parameter.
    When an Error is detected, also an ERROR is passed to the log. Because
    this isn't implemented yet, it is replaced by a nop.
    The macro EXIT becomes now useless. It was used earlier in case of an
    error, to terminate the program in the first place. This behaviour is not
    userfriendly, but it can't be decided on the library's side, whether
    there is an option to inform the user, something must be cleaned up or
    even that recovering is possible at all.
    Often these recognized errors are a non-working malloc or an over-/underflow.
    
    Error handling can be ignored by the caller by passing NULL to the Error
    parameter. Whether an error had occured, is also always possible to be
    determined, by examining the return value. If the error occours in a
    function returning a pointer, NULL will be returned. If it returns an value,
    a special error value of that type is returned, i.e. PAGE_ERR in
    SH_Data_register_page. If the return type would be void, a boolean is returned,
    which tells, whether the method has succeeded.
    (False means, that an error has occured.)
    
    The error may have occured in an intern method and is passed upwards (the stack).
    Internally errors are handled by an enum, but this must be considered an
    implementation detail and can be changed in later versions.
    It is in the responsibility of the caller to recover gracefully. It has
    to be assumed that the requested operation have neither worked, nor
    actually took place. Those the operation can be retried (hopefully).
    6a592b8d
    History
    error handling added
    Jonathan Schöbel authored
    Error handling is done by passing an Error structure as inout parameter
    to functions that can fail on runtime predictable. This parameter is
    always the last one. Methods, where this is not the case, doesn't have an
    error parameter.
    When an Error is detected, also an ERROR is passed to the log. Because
    this isn't implemented yet, it is replaced by a nop.
    The macro EXIT becomes now useless. It was used earlier in case of an
    error, to terminate the program in the first place. This behaviour is not
    userfriendly, but it can't be decided on the library's side, whether
    there is an option to inform the user, something must be cleaned up or
    even that recovering is possible at all.
    Often these recognized errors are a non-working malloc or an over-/underflow.
    
    Error handling can be ignored by the caller by passing NULL to the Error
    parameter. Whether an error had occured, is also always possible to be
    determined, by examining the return value. If the error occours in a
    function returning a pointer, NULL will be returned. If it returns an value,
    a special error value of that type is returned, i.e. PAGE_ERR in
    SH_Data_register_page. If the return type would be void, a boolean is returned,
    which tells, whether the method has succeeded.
    (False means, that an error has occured.)
    
    The error may have occured in an intern method and is passed upwards (the stack).
    Internally errors are handled by an enum, but this must be considered an
    implementation detail and can be changed in later versions.
    It is in the responsibility of the caller to recover gracefully. It has
    to be assumed that the requested operation have neither worked, nor
    actually took place. Those the operation can be retried (hopefully).
main.c 1.07 KiB
/*
 * main.c
 *
 * Copyright 2022 Jonathan Schöbel <jonathan@Ubermos-2019>
 *
 * 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., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 *
 *
 */


#include <stdio.h>
#include "cms.h"

int main(int argc, char **argv)
{
	page_t page;

	/* startup */
	struct SH_Cms * cms = SH_Cms_new (NULL);
	/* startup */

	page = SH_Cms_register_page (cms, "Startpage", NULL);

	/* shutdown */
	SH_Cms_free (cms, NULL);
	/* shutdown */

	return 0;
}