Crossfire Server, Trunk  R22010
shstr.c File Reference
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
#include <sys/types.h>
#include <limits.h>
#include <string.h>
#include <global.h>
#include <libproto.h>
#include <logger.h>
#include "shstr.h"
#include <autoconf.h>
+ Include dependency graph for shstr.c:

Go to the source code of this file.




sstring add_refcount (sstring str)
sstring add_string (const char *str)
int buf_overflow (const char *buf1, const char *buf2, size_t bufsize)
sstring find_string (const char *str)
void free_string (sstring str)
static unsigned long hashstr (const char *str)
void init_hash_table (void)
static shared_stringnew_shared_string (const char *str)
int query_refcount (sstring str)
void ss_dump_statistics (char *buf, size_t size)
char * ss_dump_table (int what, char *buf, size_t size)


static shared_stringhash_table [TABLESIZE]

Detailed Description

This is a simple shared strings package with a simple interface.

Author: Kjetil T. Homme, Oslo 1992.

Definition in file shstr.c.

Macro Definition Documentation



Definition at line 37 of file shstr.c.

Function Documentation

◆ add_refcount()

◆ add_string()

sstring add_string ( const char *  str)

This will add 'str' to the hash table. If there's no entry for this string, a copy will be allocated, and a pointer to that is returned.

strstring to share.
pointer to string identical to str, but shared.

Definition at line 124 of file shstr.c.

References _shared_string::array, GATHER, hashstr(), new_shared_string(), _shared_string::next, _shared_string::previous, _shared_string::refcount, _shared_string::string, TOPBIT, and _shared_string::u.

Referenced by account_char_add(), account_char_load(), account_play_cmd(), add_author(), add_book_to_list(), add_god_to_list(), add_to_racelist(), adjust_sign_msg(), alchemy_failure_effect(), animate_weapon(), apply_race_and_class(), become_follower(), cast_bless(), cast_create_town_portal(), cast_word_of_recall(), cctk_set_object_strings(), cfapi_system_add_string(), change_abil(), change_book(), change_treasure(), check_login(), command_follow(), command_reset(), command_summon(), command_teleport(), command_unarmed_skill(), confuse_living(), Treasures::create(), AllAnimations::create(), Faces::create(), Messages::create(), Archetypes::create(), create_singularity(), determine_god(), do_goto(), do_throw(), enter_player_savebed(), enter_random_map(), examine_monster(), find_or_create_connection_for_map(), finish_races(), fire_bow(), fix_container_multipart(), fix_generated_item(), fix_stopped_arrow(), get_jail_exit(), get_player(), give_artifact_abilities(), god_enchants_weapon(), grant_immunity(), i18n(), i18n_init(), init_artifacts(), init_book_archive(), init_formulae(), init_globals(), key_change_class(), keyplace(), kill_player(), knowledge_add(), knowledge_read_player_data(), load_materials(), load_quests_from_file(), FaceLoader::loadAnimationBlock(), TreasureLoader::loadTreasure(), local_check_loaded_object(), lock_and_hide_doors(), monster_do_talk_npc(), move_marker(), new_text_name(), object_find_by_name(), object_find_by_name_global(), object_fix_multipart(), object_set_msg(), object_set_value(), object_set_value_s(), pets_summon_golem(), place_chest(), place_exits(), place_special_exit(), potion_type_apply(), process_object(), MessageLoader::processFile(), FaceLoader::processFile(), TreasureLoader::processFile(), quest_read_player_data(), receive_play_again(), set_materialname(), START_TEST(), stringbuffer_finish_shared(), tailor_god_spell(), town_portal_find_force(), and write_mark().

+ Here is the call graph for this function:

◆ buf_overflow()

int buf_overflow ( const char *  buf1,
const char *  buf2,
size_t  bufsize 

We don't want to exceed the buffer size of buf1 by adding on buf2!

buf2buffers we plan on concatening. Can be NULL.
bufsizesize of buf1. Can be NULL.
true if overflow will occur.

Definition at line 398 of file shstr.c.

Referenced by book_overflow(), MessageLoader::processFile(), and START_TEST().

+ Here is the caller graph for this function:

◆ find_string()

sstring find_string ( const char *  str)

Searches a string in the shared strings.

strstring to search for.
pointer to identical string or NULL

Definition at line 236 of file shstr.c.

References GATHER, hashstr(), _shared_string::next, and _shared_string::string.

Referenced by cfapi_system_find_string(), find_artifact(), Archetypes::findByObjectName(), object_get_value(), object_set_value(), skill_throw(), and START_TEST().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ free_string()

void free_string ( sstring  str)

This will reduce the refcount, and if it has reached 0, str will be freed.

strstring to release, which *must *have been returned from a previous add_string().
the memory pointed to by str can be freed after this call, so don't use str anymore.

Definition at line 280 of file shstr.c.

References _shared_string::array, GATHER, _shared_string::next, _shared_string::previous, _shared_string::refcount, SS, TOPBIT, and _shared_string::u.

Referenced by account_char_add(), account_char_free(), account_char_remove(), add_abilities(), adjust_sign_msg(), alchemy_failure_effect(), animate_bomb(), animate_weapon(), apply_race_and_class(), become_follower(), cast_bless(), cast_change_ability(), cast_curse(), cfapi_system_remove_string(), change_abil(), change_book(), change_treasure(), command_unarmed_skill(), cone_drop(), confuse_living(), create_aura(), Treasures::destroy(), AllAnimations::destroy(), Faces::destroy(), do_symptoms(), do_throw(), dragon_focus_type_apply(), enter_player_savebed(), examine_monster(), finish_races(), fire_bow(), fix_container_multipart(), fix_object(), free_all_god(), free_all_readable(), free_all_recipes(), free_arch(), free_artifact(), free_knowledge_items(), free_knowledge_player(), free_quest(), free_quest_definitions(), free_races(), free_state(), give_artifact_abilities(), hit_with_arrow(), i18n(), i18n_free(), i18n_init(), identify(), infect_object(), key_change_class(), keyplace(), knowledge_god_add(), load_quests_from_file(), local_check_loaded_object(), make_formula_book(), mon_info_msg(), monster_communicate(), monster_move(), new_text_name(), object_copy(), object_find_by_name(), object_find_by_name_global(), object_fix_multipart(), object_set_msg(), object_set_value(), pets_summon_golem(), poison_living(), potion_type_apply(), process_object(), FaceLoader::processFile(), AllAnimations::replace(), START_TEST(), tailor_god_spell(), and town_portal_find_force().

◆ hashstr()

static unsigned long hashstr ( const char *  str)

Hashing-function used by the shared string library.

strstring to hash.
hash of string, suitable for use in hash_table.

Definition at line 70 of file shstr.c.


Referenced by add_string(), and find_string().

+ Here is the caller graph for this function:

◆ init_hash_table()

void init_hash_table ( void  )

Initialises the hash-table used by the shared string library.

Definition at line 55 of file shstr.c.

References hash_table, and TABLESIZE.

Referenced by cctk_init_std_archetypes(), init_library(), and setup().

+ Here is the caller graph for this function:

◆ new_shared_string()

static shared_string* new_shared_string ( const char *  str)

Allocates and initialises a new shared_string structure, containing the string str.

will fatal() in case of memory allocation failure.
strstring to store.
sharing structure.

Definition at line 98 of file shstr.c.

References fatal(), _shared_string::next, OUT_OF_MEMORY, PADDING, _shared_string::previous, _shared_string::refcount, _shared_string::string, and _shared_string::u.

Referenced by add_string().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ query_refcount()

int query_refcount ( sstring  str)

This will return the refcount of the string str.

strstring which *must *have been returned from a previous add_string().
refcount of the string.

Definition at line 224 of file shstr.c.

References SS, and TOPBIT.

Referenced by START_TEST().

+ Here is the caller graph for this function:

◆ ss_dump_statistics()

void ss_dump_statistics ( char *  buf,
size_t  size 

A call to this function will cause the statistics to be dumped into specified buffer.

The routines will gather statistics if SS_STATISTICS is defined.

bufbuffer which will contain dumped information.
sizebuf's size.

Definition at line 323 of file shstr.c.

References snprintf.

Referenced by command_strings().

+ Here is the caller graph for this function:

◆ ss_dump_table()

char* ss_dump_table ( int  what,
char *  buf,
size_t  size 

Dump the contents of the share string tables.

whatcombination of flags:
  • SS_DUMP_TABLE: dump the contents of the hash table to stderr.
  • SS_DUMP_TOTALS: return a string which says how many entries etc. there are in the table.
bufbuffer that will contain total information if (what & SS_DUMP_TABLE). Left untouched else.
sizebuffer's size
buf if (what & SS_DUMP_TOTALS) or NULL.

Definition at line 354 of file shstr.c.

References buf, llevDebug, LOG(), _shared_string::next, _shared_string::refcount, snprintf, SS_DUMP_TABLE, SS_DUMP_TOTALS, _shared_string::string, TABLESIZE, and TOPBIT.

Referenced by command_ssdumptable(), and command_strings().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Variable Documentation

◆ hash_table

shared_string* hash_table[TABLESIZE]

Hash table to store our string.

Definition at line 50 of file shstr.c.

Referenced by init_hash_table(), and init_ptr_assoc_table().