Cross reference for rpsl/syntax_api.c of index.

# File rpsl/syntax_api.c

      Copyright (c) 2002                                        RIPE NCC

      All Rights Reserved

      Permission to use, copy, modify, and distribute this software and its
      documentation for any purpose and without fee is hereby granted,
      provided that the above copyright notice appear in all copies and that
      both that copyright notice and this permission notice appear in
      supporting documentation, and that the name of the author not be
      used in advertising or publicity pertaining to distribution of the
      software without specific, written prior permission.

      THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
      ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL
      AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
      DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
      AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
      OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

## Included Files

- `#include <ctype.h>`

- `#include <string.h>`

- `#include <stdlib.h>`

- `#include <stdarg.h>`

- `#include </ncc/dbwork/platforms/yucca-debug/glib-indep/include/glib-1.2/glib.h>`

- `#include "rpsl/syntax_api.h"`

- `#include "rpsl/syntax.h"`
  - `#include <glib.h>`
  - `#include <sys/types.h>`
  - `#include <regex.h>`

- `#include "rpsl/attribute.h"`

- `#include "rpsl/class.h"`
  - `#include <glib.h>`

- `#include <assert.h>`

## Preprocessor definitions

`#define RUNTIME_CHECK 0`

`#define chk_obj( o )`

`#define chk_attr( a )`

`#define chk_err( e )`

`#define is_rpsl_line_cont( c )`

`#define TABSTOP 8`

## Local Variables

rpsl_level
`static int rpsl_level`

Used in: | rpsl_attr_syntax_check()
| rpsl_load_dictionary()
| rpsl_read_dictionary()

## Global Function rpsl_attr_clean_copy()

`rpsl_attr_t* rpsl_attr_clean_copy ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | attribute_clean() | rpsl/syntax_api.c
| g_malloc(), g_strdup()
Called by: | rpsl_attr_get_split_list() | rpsl/syntax_api.c

## Global Function rpsl_attr_copy()

`rpsl_attr_t* rpsl_attr_copy ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_error_copy() | rpsl/syntax_api.c
| g_list_append(), g_malloc(), g_strdup()
Called by: | rpsl_object_copy() | rpsl/syntax_api.c
| rpsl_object_get_attr() | rpsl/syntax_api.c

## Global Function rpsl_attr_delete()

`void rpsl_attr_delete ( rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | g_free(), g_list_free()
Called by: | rpsl_attr_delete_list() | rpsl/syntax_api.c
| rpsl_attr_init() | rpsl/syntax_api.c
| rpsl_object_delete() | rpsl/syntax_api.c
| rpsl_object_init() | rpsl/syntax_api.c

## Global Function rpsl_attr_delete_list()

`void rpsl_attr_delete_list ( GList* attributes )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_attr_delete() | rpsl/syntax_api.c
| g_list_free()
Called by: | NT_gather_ntfy_addresses() | nt/notification.c

## Global Function rpsl_attr_errors()

`const GList* rpsl_attr_errors ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Called by: | rpsl_object_init() | rpsl/syntax_api.c
| template_check_needed() | rpsl/syntax_api.c

## Global Function rpsl_attr_get_clean_value()

`gchar* rpsl_attr_get_clean_value ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | attribute_clean() | rpsl/syntax_api.c
| g_free(), strdup()
Called by: | NT_compare_lists() | nt/notification.c
| NT_gather_frwd_addresses() | nt/notification.c
| NT_unify_list() | nt/notification.c
| get_overlapping_routes_list() | nt/notification.c

## Global Function rpsl_attr_get_name()

`const gchar* rpsl_attr_get_name ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Called by: | add_aligned_val() | rpsl/syntax_api.c
| add_attr_to_object() | rpsl/syntax_api.c
| rpsl_object_copy() | rpsl/syntax_api.c
| rpsl_object_copy_flattened() | rpsl/syntax_api.c
| rpsl_object_get_text() | rpsl/syntax_api.c
| rpsl_object_init() | rpsl/syntax_api.c
| rpsl_object_remove_attr() | rpsl/syntax_api.c

## Global Function rpsl_attr_get_ofs()

`gint rpsl_attr_get_ofs ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h

## Global Function rpsl_attr_get_split_list()

`GList* rpsl_attr_get_split_list ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | attribute_list_split() | rpsl/syntax_api.c
| ripe_list_split() | rpsl/syntax_api.c
| rpsl_attr_clean_copy() | rpsl/syntax_api.c
| __eprintf(), g_list_append(), g_malloc(), g_strdup(), g_strfreev()
Called by: | rpsl_object_copy_flattened() | rpsl/syntax_api.c

## Global Function rpsl_attr_get_value()

`const gchar* rpsl_attr_get_value ( const rpsl_attr_t* attr )`

Prototyped in: | rpsl/syntax_api.h
Called by: | add_aligned_val() | rpsl/syntax_api.c
| rpsl_object_get_text() | rpsl/syntax_api.c

## Global Function rpsl_attr_has_error()

`gboolean rpsl_attr_has_error ( const rpsl_attr_t* attr, int error_level )`

Prototyped in: | rpsl/syntax_api.h
Calls: | search_errors() | rpsl/syntax_api.c
Called by: | rpsl_object_init() | rpsl/syntax_api.c

## Global Function rpsl_attr_init()

`rpsl_attr_t* rpsl_attr_init ( const gchar* s, const gchar* class )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_attr_delete() | rpsl/syntax_api.c
| rpsl_attr_syntax_check() | rpsl/syntax_api.c
| rpsl_error_add() | rpsl/syntax_api.c
| __eprintf(), attribute_lookup(), attribute_lookup_by_offset(), class_attr_lookup(), class_lookup(), g_malloc(), g_strdown(), g_strdup(), g_strfreev(), g_strsplit(), strchr()
Called by: | rpsl_object_init() | rpsl/syntax_api.c

## Global Function rpsl_attr_is_generated()

`gboolean rpsl_attr_is_generated ( const rpsl_object_t* object, const gchar* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | class_attr_lookup()

## Global Function rpsl_attr_is_key()

`gboolean rpsl_attr_is_key ( const rpsl_object_t* object, const gchar* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | __eprintf(), attribute_lookup_by_offset(), class_attr_lookup()

## Global Function rpsl_attr_is_lookup()

`gboolean rpsl_attr_is_lookup ( const rpsl_object_t* object, const gchar* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | __eprintf(), attribute_lookup_by_offset(), class_attr_lookup()

## Global Function rpsl_attr_is_multivalued()

`gboolean rpsl_attr_is_multivalued ( const rpsl_object_t* object, const gchar* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | class_attr_lookup()

## Global Function rpsl_attr_is_required()

`gboolean rpsl_attr_is_required ( const rpsl_object_t* object, const gchar* attr )`

Prototyped in: | rpsl/syntax_api.h
Calls: | class_attr_lookup()

## Global Function rpsl_attr_replace_value()

`void rpsl_attr_replace_value ( rpsl_attr_t* attr, const gchar* value )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_attr_syntax_check() | rpsl/syntax_api.c
| g_free(), g_strdup()

## Global Function rpsl_get_attr_id()

`gint rpsl_get_attr_id ( const gchar* attr_name )`

Prototyped in: | rpsl/syntax_api.h
Calls: | attribute_lookup()

## Global Function rpsl_get_class_id()

`gint rpsl_get_class_id ( const gchar* class_name )`

Prototyped in: | rpsl/syntax_api.h
Calls: | class_lookup()

## Global Function rpsl_load_dictionary()

`void rpsl_load_dictionary ( int level )`

Prototyped in: | rpsl/syntax_api.h
References Variables: | rpsl_level | rpsl/syntax_api.c

## Global Function rpsl_object_add_attr()

`int rpsl_object_add_attr ( rpsl_object_t* object, rpsl_attr_t* attr, gint ofs, rpsl_error_t* error )`

Prototyped in: | rpsl/syntax_api.h
Calls: | add_attr_to_object() | rpsl/syntax_api.c
| rpsl_error_assign() | rpsl/syntax_api.c

## Global Function rpsl_object_append_attr()

`int rpsl_object_append_attr ( rpsl_object_t* object, rpsl_attr_t* attr, rpsl_error_t* error )`

Prototyped in: | rpsl/syntax_api.h
Calls: | add_attr_to_object() | rpsl/syntax_api.c

## Global Function rpsl_object_copy()

`rpsl_object_t* rpsl_object_copy ( const rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_attr_copy() | rpsl/syntax_api.c
| rpsl_attr_get_name() | rpsl/syntax_api.c
| rpsl_error_copy() | rpsl/syntax_api.c
| g_hash_table_insert(), g_hash_table_lookup(), g_hash_table_new(), g_list_append(), g_malloc()
References Functions: | my_g_str_hash() | rpsl/syntax_api.c
| my_g_strcasecmp() | rpsl/syntax_api.c

## Global Function rpsl_object_copy_flattened()

`rpsl_object_t* rpsl_object_copy_flattened ( const rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h
Calls: | renumber_attr() | rpsl/syntax_api.c
| rpsl_attr_get_name() | rpsl/syntax_api.c
| rpsl_attr_get_split_list() | rpsl/syntax_api.c
| g_hash_table_insert(), g_hash_table_lookup(), g_hash_table_new(), g_list_append(), g_list_free(), g_malloc()
References Functions: | my_g_str_hash() | rpsl/syntax_api.c
| my_g_strcasecmp() | rpsl/syntax_api.c

## Global Function rpsl_object_delete()

`void rpsl_object_delete ( rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_attr_delete() | rpsl/syntax_api.c
| g_free(), g_hash_table_destroy(), g_hash_table_foreach(), g_list_free()
Called by: | NT_gather_ntfy_addresses() | nt/notification.c
| NT_write_all_ntfs() | nt/notification.c
References Functions: | rpsl_object_delete_helper() | rpsl/syntax_api.c

## Global Function rpsl_object_errors()

`const GList* rpsl_object_errors ( const rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h
Called by: | NT_gather_frwd_addresses() | nt/notification.c
| NT_gather_ntfy_addresses() | nt/notification.c
| NT_write_all_frwds() | nt/notification.c
| NT_write_all_ntfs() | nt/notification.c

## Global Function rpsl_object_get_all_attr()

`const GList* rpsl_object_get_all_attr ( const rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h

## Global Function rpsl_object_get_attr()

`GList* rpsl_object_get_attr ( const rpsl_object_t* object, const gchar* name )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_attr_copy() | rpsl/syntax_api.c
| g_hash_table_lookup(), g_list_append()
Called by: | get_overlapping_routes_list() | nt/notification.c

## Global Function rpsl_object_get_attr_by_ofs()

`const rpsl_attr_t* rpsl_object_get_attr_by_ofs ( const rpsl_object_t* object, gint ofs )`

Prototyped in: | rpsl/syntax_api.h
Calls: | g_list_nth_data()

## Global Function rpsl_object_get_class()

`const char* rpsl_object_get_class ( const rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h
Called by: | NT_write_all_ntfs() | nt/notification.c

## Global Function rpsl_object_get_num_attr()

`gint rpsl_object_get_num_attr ( const rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h
Calls: | g_list_length()
Called by: | add_attr_to_object() | rpsl/syntax_api.c
| rpsl_object_remove_attr() | rpsl/syntax_api.c

## Global Function rpsl_object_get_text()

`gchar* rpsl_object_get_text ( const rpsl_object_t* object, guint data_column )`

Prototyped in: | rpsl/syntax_api.h
Calls: | add_aligned_val() | rpsl/syntax_api.c
| rpsl_attr_get_name() | rpsl/syntax_api.c
| rpsl_attr_get_value() | rpsl/syntax_api.c
| g_string_append(), g_string_append_c(), g_string_free(), g_string_new(), malloc(), strcpy()
Called by: | NT_write_all_frwds() | nt/notification.c
| NT_write_all_ntfs() | nt/notification.c

## Global Function rpsl_object_has_error()

`gboolean rpsl_object_has_error ( const rpsl_object_t* object, int error_level )`

Prototyped in: | rpsl/syntax_api.h
Calls: | search_errors() | rpsl/syntax_api.c
Called by: | NT_gather_ntfy_addresses() | nt/notification.c

## Global Function rpsl_object_init()

`rpsl_object_t* rpsl_object_init ( const gchar* s )`

Prototyped in: | rpsl/syntax_api.h
Calls: | object_is_comment() | rpsl/syntax_api.c
| renumber_attr() | rpsl/syntax_api.c
| rpsl_attr_delete() | rpsl/syntax_api.c
| rpsl_attr_errors() | rpsl/syntax_api.c
| rpsl_attr_get_name() | rpsl/syntax_api.c
| rpsl_attr_has_error() | rpsl/syntax_api.c
| rpsl_attr_init() | rpsl/syntax_api.c
| rpsl_empty_attr() | rpsl/syntax_api.c
| rpsl_error_add() | rpsl/syntax_api.c
| template_check_needed() | rpsl/syntax_api.c
| __eprintf(), attribute_lookup_by_offset(), class_attr_lookup(), class_lookup(), g_free(), g_hash_table_insert(), g_hash_table_lookup(), g_hash_table_new(), g_list_append(), g_malloc(), g_ptr_array_add(), g_ptr_array_free(), g_ptr_array_new(), g_ptr_array_remove_index_fast(), g_strdup(), g_strndup(), strchr()
Called by: | NT_gather_frwd_addresses() | nt/notification.c
| NT_gather_ntfy_addresses() | nt/notification.c
| NT_write_all_frwds() | nt/notification.c
| NT_write_all_ntfs() | nt/notification.c
References Functions: | my_g_str_hash() | rpsl/syntax_api.c
| my_g_strcasecmp() | rpsl/syntax_api.c

## Global Function rpsl_object_is_deleted()

`gboolean rpsl_object_is_deleted ( const rpsl_object_t* object )`

Prototyped in: | rpsl/syntax_api.h
Calls: | g_hash_table_lookup()

## Global Function rpsl_object_remove_attr()

`rpsl_attr_t* rpsl_object_remove_attr ( rpsl_object_t* object, gint ofs, rpsl_error_t* error )`

Prototyped in: | rpsl/syntax_api.h
Calls: | renumber_attr() | rpsl/syntax_api.c
| rpsl_attr_get_name() | rpsl/syntax_api.c
| rpsl_error_assign() | rpsl/syntax_api.c
| rpsl_object_get_num_attr() | rpsl/syntax_api.c
| __eprintf(), class_attr_lookup(), g_free(), g_hash_table_insert(), g_hash_table_lookup(), g_hash_table_remove(), g_list_free(), g_list_nth_data(), g_list_remove(), g_list_remove_link()
Called by: | rpsl_object_remove_attr_name() | rpsl/syntax_api.c

## Global Function rpsl_object_remove_attr_name()

`rpsl_attr_t* rpsl_object_remove_attr_name ( rpsl_object_t* object, const gchar* name, rpsl_error_t* error )`

Prototyped in: | rpsl/syntax_api.h
Calls: | rpsl_error_assign() | rpsl/syntax_api.c
| rpsl_object_remove_attr() | rpsl/syntax_api.c
| g_hash_table_lookup()

## Global Function rpsl_read_dictionary()

`int rpsl_read_dictionary ( void )`

Prototyped in: | rpsl/syntax_api.h
References Variables: | rpsl_level | rpsl/syntax_api.c

## Local Function add_aligned_val()

`static void add_aligned_val ( GString* s, const rpsl_attr_t* attr, int col )`

Calls: | next_tabstop() | rpsl/syntax_api.c
| remove_columns() | rpsl/syntax_api.c
| rpsl_attr_get_name() | rpsl/syntax_api.c
| rpsl_attr_get_value() | rpsl/syntax_api.c
| separate_leading_whitespace() | rpsl/syntax_api.c
| whitespace_length() | rpsl/syntax_api.c
| g_strfreev(), g_string_append(), g_string_append_c(), g_string_free(), g_string_prepend_c(), g_strsplit(), strlen()
Called by: | rpsl_object_get_text() | rpsl/syntax_api.c

## Local Function add_attr_to_object()

`static int add_attr_to_object ( rpsl_object_t* object, rpsl_attr_t* attr, gint ofs, rpsl_error_t* error )`

Calls: | renumber_attr() | rpsl/syntax_api.c
| rpsl_attr_get_name() | rpsl/syntax_api.c
| rpsl_error_assign() | rpsl/syntax_api.c
| rpsl_object_get_num_attr() | rpsl/syntax_api.c
| class_attr_lookup(), g_hash_table_insert(), g_hash_table_lookup(), g_list_append(), g_list_insert(), g_list_nth()
Called by: | rpsl_object_add_attr() | rpsl/syntax_api.c
| rpsl_object_append_attr() | rpsl/syntax_api.c

## Local Function asctime_r()

`static char* asctime_r ( const struct tm* __tm, char* __buf )`

Included from: | /usr/include/time.h
Calls: | __posix_asctime_r()

## Local Function attribute_clean()

`static gchar* attribute_clean ( const gchar* val )`

Calls: | __eprintf(), g_strfreev(), g_strjoinv(), g_strsplit(), strchr()
Called by: | generic_list_split() | rpsl/syntax_api.c
| rpsl_attr_clean_copy() | rpsl/syntax_api.c
| rpsl_attr_get_clean_value() | rpsl/syntax_api.c
| rpsl_attr_syntax_check() | rpsl/syntax_api.c

## Local Function attribute_list_split()

`static gchar** attribute_list_split ( const char* val )`

Calls: | generic_list_split() | rpsl/syntax_api.c
Called by: | rpsl_attr_get_split_list() | rpsl/syntax_api.c
| rpsl_attr_syntax_check() | rpsl/syntax_api.c

## Local Function ctime_r()

`static char* ctime_r ( const time_t* __time, char* __buf )`

Included from: | /usr/include/time.h
Calls: | __posix_ctime_r()

## Local Function generic_list_split()

`static gchar** generic_list_split ( const char* val, const char* separator_char )`

Calls: | attribute_clean() | rpsl/syntax_api.c
| str_ends_with() | rpsl/syntax_api.c
| g_free(), g_realloc(), g_strchomp(), g_strchug(), g_strdup(), g_strsplit()
Called by: | attribute_list_split() | rpsl/syntax_api.c
| ripe_list_split() | rpsl/syntax_api.c

## Local Function my_g_str_hash()

`static guint my_g_str_hash ( gconstpointer v )`

Calls: | g_free(), g_str_hash(), g_strdown(), g_strdup()
Used in: | rpsl_object_copy() | rpsl/syntax_api.c
| rpsl_object_copy_flattened() | rpsl/syntax_api.c
| rpsl_object_init() | rpsl/syntax_api.c

## Local Function my_g_strcasecmp()

`static gint my_g_strcasecmp ( gconstpointer a, gconstpointer b )`

Calls: | g_strcasecmp()
Used in: | rpsl_object_copy() | rpsl/syntax_api.c
| rpsl_object_copy_flattened() | rpsl/syntax_api.c
| rpsl_object_init() | rpsl/syntax_api.c

## Local Function next_tabstop()

`static guint next_tabstop ( guint col )`

Called by: | add_aligned_val() | rpsl/syntax_api.c
| whitespace_length() | rpsl/syntax_api.c

## Local Function object_is_comment()

`static gboolean object_is_comment ( const gchar* s )`

Calls: | strchr()
Called by: | rpsl_object_init() | rpsl/syntax_api.c

## Local Function remove_columns()

`static void remove_columns ( GString* s, int col, int start_col )`

Calls: | whitespace_length() | rpsl/syntax_api.c
| g_string_append_c(), g_string_truncate()
Called by: | add_aligned_val() | rpsl/syntax_api.c

## Local Function renumber_attr()

`static void renumber_attr ( rpsl_attr_t* attr, int num )`

Called by: | add_attr_to_object() | rpsl/syntax_api.c
| rpsl_object_copy_flattened() | rpsl/syntax_api.c
| rpsl_object_init() | rpsl/syntax_api.c
| rpsl_object_remove_attr() | rpsl/syntax_api.c

## Local Function ripe_list_split()

`static gchar** ripe_list_split ( const char* val )`

Calls: | generic_list_split() | rpsl/syntax_api.c
Called by: | rpsl_attr_get_split_list() | rpsl/syntax_api.c
| rpsl_attr_syntax_check() | rpsl/syntax_api.c

## Local Function rpsl_attr_syntax_check()

`static gboolean rpsl_attr_syntax_check ( const attribute_t* attr_info, const gchar* value, GList** errors )`

Calls: | attribute_clean() | rpsl/syntax_api.c
| attribute_list_split() | rpsl/syntax_api.c
| ripe_list_split() | rpsl/syntax_api.c
| rpsl_error_add() | rpsl/syntax_api.c
| g_free(), g_malloc(), g_ptr_array_free(), g_ptr_array_remove_index(), g_strfreev(), syntax_check_by_offset()
Called by: | rpsl_attr_init() | rpsl/syntax_api.c
| rpsl_attr_replace_value() | rpsl/syntax_api.c
References Variables: | rpsl_level | rpsl/syntax_api.c

## Local Function rpsl_empty_attr()

`static rpsl_attr_t* rpsl_empty_attr ( void )`

Calls: | g_malloc(), g_strdup()
Called by: | rpsl_object_init() | rpsl/syntax_api.c

## Local Function rpsl_error_add()

`static void rpsl_error_add ( GList** errors, gint level, gint code, gint attr_num, gchar* descr_fmt, ... )`

Calls: | __builtin_next_arg(), __builtin_saveregs(), g_list_append(), g_malloc(), g_strdup_vprintf()
Called by: | rpsl_attr_init() | rpsl/syntax_api.c
| rpsl_attr_syntax_check() | rpsl/syntax_api.c
| rpsl_object_init() | rpsl/syntax_api.c

## Local Function rpsl_error_assign()

`static void rpsl_error_assign ( rpsl_error_t* error, gint level, gint code, gchar* descr_fmt, ... )`

Calls: | __builtin_next_arg(), __builtin_saveregs(), g_strdup_vprintf()
Called by: | add_attr_to_object() | rpsl/syntax_api.c
| rpsl_object_add_attr() | rpsl/syntax_api.c
| rpsl_object_remove_attr() | rpsl/syntax_api.c
| rpsl_object_remove_attr_name() | rpsl/syntax_api.c

## Local Function rpsl_error_copy()

`static rpsl_error_t* rpsl_error_copy ( const rpsl_error_t* err )`

Calls: | g_malloc(), g_strdup()
Called by: | rpsl_attr_copy() | rpsl/syntax_api.c
| rpsl_object_copy() | rpsl/syntax_api.c

## Local Function rpsl_object_delete_helper()

`static void rpsl_object_delete_helper ( gpointer attr_name, gpointer attr_list, gpointer null )`

Calls: | g_list_free()
Used in: | rpsl_object_delete() | rpsl/syntax_api.c

## Local Function search_errors()

`static gboolean search_errors ( const GList* errors, int error_level )`

Called by: | rpsl_attr_has_error() | rpsl/syntax_api.c
| rpsl_object_has_error() | rpsl/syntax_api.c

## Local Function separate_leading_whitespace()

`static void separate_leading_whitespace ( const gchar* str, GString** ws, GString** non_ws )`

Calls: | g_string_new(), g_string_truncate()
Called by: | add_aligned_val() | rpsl/syntax_api.c

## Local Function str_ends_with()

`static gboolean str_ends_with ( const char* s1, const char* s2 )`

Calls: | strcmp(), strlen()
Called by: | generic_list_split() | rpsl/syntax_api.c

## Local Function template_check_needed()

`static gboolean template_check_needed ( const rpsl_attr_t* attr )`

Calls: | rpsl_attr_errors() | rpsl/syntax_api.c
Called by: | rpsl_object_init() | rpsl/syntax_api.c

## Local Function whitespace_length()

`static int whitespace_length ( const gchar* str, int start_col )`

Calls: | next_tabstop() | rpsl/syntax_api.c
Called by: | add_aligned_val() | rpsl/syntax_api.c
| remove_columns() | rpsl/syntax_api.c