Version 1.83 2025-11-15 * fast_task_queue.h: remove field finish_callback Version 1.82 2025-11-04 * set use_io_uring explicitly Version 1.81 2025-10-05 * support Linux io_uring * free_queue support parameter: need_shrink and set task->shrinked * IOEventCallback: change event type from short to int Version 1.80 2025-09-10 * getIpaddrByNameEx: IPv4 has priority over IPv6 * shared_func.[hc]: add function fc_ftoa Version 1.79 2025-08-29 * logger.h export function log_it_ex3 * shared_func.[hc]: add function bytes_to_human_str Version 1.78 2025-08-07 * getIpaddrByName: normalize ip addr when input addr is IPv4 or IPv6 * add files: spinlock.[hc] * shared_func.[hc]: change int2buff, buff2int etc. functions to static inline * shared_func.[hc]: add functions short2hex, int2hex, long2hex etc. * performance opt.: replace sprintf and snprintf as necessary Version 1.77 2025-03-18 * impl. shorten_path for /./ and /../ * add function fc_compare_int64_ptr Version 1.76 2025-01-27 * get_mounted_filesystems act as program df * add function get_statfs_by_path * add function is_rotational_device_by_path * conn_pool_get_connection_ex add parameter: shared Version 1.75 2024-09-22 * task init callback support extra argument * connection pool performance optimization Version 1.74 2024-05-18 * add functions: get_log_level and get_log_level_caption * adapt to FreeBSD 13 Version 1.73 2024-03-05 * add macro FC_SET_STRING_EMPTY * struct fast_task_info remove fields: connect_timeout and network_timeout * format ip address for IPv6 Version 1.72 2024-01-21 * call fast_mblock_ref_counter_dec for delay free node correctly * fc_queue.[hc]: add function fc_queue_remove Version 1.71 2023-12-23 * full support IPv6 by pull request #47 * replace inet_ntop to getnameinfo for IPv6 Version 1.70 2023-09-30 * get full mac address of infiniband NIC under Linux * struct fast_task_info add field conn for RDMA connection * server_id_func.[hc]: support communication type * connection_pool.[hc] support callbacks for RDMA * nio thread data support busy_polling_callback * connection_pool.[hc] support thread local for performance * struct fast_task_info support send and recv double buffers * add functions: fc_queue_push_with_check and fc_queue_peek Version 1.69 2023-08-05 * bugfixed: array_allocator_alloc MUST init the array * uniq_skiplist support arg for free callback Version 1.68 2023-07-05 * sorted_queue.[hc]: pop_compare_func support argument Version 1.67 2023-05-29 * lc_pair in struct fc_queue change to lcp * sorted queue use double link chain for quick push * add function uniq_skiplist_clear * fast_mblock_malloc_trunk_notify_func prototype changed * fast_mblock_init_ex2 add parameter prealloc_trunk_count * sorted_queue.[hc] support pop_compare_func * bugfixed: fast_mblock_batch_alloc correct return value * add function fc_safe_writev Version 1.66 2023-02-12 * struct fast_task_info add field: notify_next for nio notify queue Version 1.65 2023-01-09 * locked_list.h: add functions locked_list_move and locked_list_move_tail * add function tcp_socket_connected * parse_bytes support space charactors (before and after the unit) * add function get_groups Version 1.64 2022-11-19 * shared_func.[hc]: normalize_path use type string_t for general purpose * bugfixed: common_blocked_queue_[alloc|free]_node must use lock * bugfixed: can't use global malloc_allocator Version 1.63 2022-10-16 * sockopt.[hc]: getIpAndPort support ipv6 Version 1.62 2022-09-28 * add function fc_sleep_us * add function fc_itoa Version 1.61 2022-09-21 * get_base_path_from_conf_file_ex support parameter: noent_log_level * add function common_blocked_queue_push_chain Version 1.60 2022-08-27 * normalize_path for base_path * struct fast_task_info add field recv_body for dynamic recv buffer * add functions: iniGetDoubleCorrectValueEx and iniGetPercentCorrectValueEx * fast_allocator.[hc] support object size and callbacks Version 1.59 2022-07-21 * open file with flag O_CLOEXEC * add global var g_set_cloexec and macro FC_SET_CLOEXEC * add function fc_get_first_lines Version 1.58 2022-06-04 * add function conn_pool_connect_server_ex1 to support service name * add function conn_pool_get_connection_ex to support service name * add function iniGetCharValueEx * json_parser.[hc] refined for better performance Version 1.57 2022-04-22 * add function fc_format_path * add functions: fc_get_path_child_count and fc_copy_file * fast_mblock.[hc] support object destroy callback * bugfixed: fc_get_file_line_count_ex should rewind file Version 1.56 2022-03-09 * add function fc_gettid * function normalize_path: NULL from parameter for getcwd * sockopt.[hc] support tcpwritev and tcpreadv * add function fc_iov_get_bytes * rename hash_xxx to fc_hash_xxx * rename trim to fc_trim * add function fc_check_rename_ex Version 1.55 2022-01-12 * fastcommon php extension adapt to php 8 * function fast_mblock_batch_alloc changed * add function sched_delay_free_ptr Version 1.54 2021-12-23 * fast_allocator.[hc]: correct reclaim_interval logic * shared_func.[hc]: add functions getFileContentEx1 and getFileContent1 * fc_queue.[hc]: add function fc_queue_timedpeek * pthread_func.[hc]: add function init_pthread_rwlock * add files: sorted_queue.[hc] * add files: array_allocator.[hc] * add files: sorted_array.[hc] * shared_func.[hc]: add function fc_read_lines * normalize_path removes prefix one ./ and multi ../ Version 1.53 2021-06-30 * process_action support action status * uniq_skiplist.h: add function uniq_skiplist_iterator_at Version 1.52 2021-06-08 * process_stop more gracefully (kill -9 on timeout) * add function fc_queue_pop_to_queue_ex * add function get_path_block_size and get_device_block_size * add function fc_check_realloc_iovec_array Version 1.51 2021-05-27 * fast_mblock.[hc]: support batch alloc and batch free * uniq_skiplist.[hc]: init function add parameter: allocator_use_lock * add function normalize_path_ex and normalize_uri * use libcurl to fetch URL resource * add function get_kernel_version Version 1.50 2021-05-11 * add function is_digital_string * add function fc_server_load_from_ini_context * set thread name as necessary * add macro fc_fallocate Version 1.49 2021-04-17 * add macros: FC_ABS and FC_NEGATIVE * uniq_skiplist.c: add uniq_skiplist_pair struct and init function * add functions: fc_mkdirs and str_replace * add FilenameString type and macro * add functions: fc_string_case_compare, fc_string_case_equal etc. * add function: fc_check_filename_ex * add functions: fc_queue_push_queue_to_tail etc. * add file locked_list.h * parse_bytes function more graceful Version 1.48 2021-02-01 * fast_buffer.[hc]: add function fast_buffer_append_binary * fc_check_mkdir_ex return 0 when mkdir with errno EEXIST * add function common_blocked_queue_timedpop * add function fc_queue_timedpop Version 1.47 2021-01-20 * fc_atomic.h: add FC_ATOMIC_GET and FC_ATOMIC_SET etc. * fast_mblock.[hc]: support wait with element limit Version 1.46 2020-12-29 * add function get_time_item_from_conf_ex * INI_FIND_ITEM just break instead of return Version 1.45 2020-12-24 * add function uniq_skiplist_find_node_ex * use readdir instead of readdir_r in Linux Version 1.44 2020-12-06 * add test file src/tests/test_pthread_lock.c * add uniq_skiplist.[hc] * add function split_string_ex * fast_mblock.[hc]: add init_args for init_func * struct fast_task_info add field: nio_stage * add function fc_memrchr * add function is_network_error * add function fast_mpool_log_stats * add files: server_id_func.[hc] * common_blocked_queue support pop all nodes * shared_func.[hc]: add functions fc_floor_prime and fc_ceil_prime * fast_mpool.[hc]: change function fast_mpool_strdup * fast_allocator.[hc]: add function fast_allocator_strdup * shared_func.[hc]: add function getFileSize * char_converter.[hc]: add function fast_char_unescape * struct fast_task_info add ctx pointer for libserverframe nio * struct thread_data add waiting_queue for Linux eventfd notify * struct fast_task_info add canceled field for complicated thread model * nio_thread_data support thread notify * pthread_func.[hc] add functions: create_work_threads_ex and fc_create_thread * sched_add_entries use temp ScheduleArray for rare case * add function common_blocked_queue_return_nodes * add functions getIpAndPort and getPeerIpAndPort * bugfixed: call fast_mblock_destroy in common_blocked_queue_destroy * add function fc_get_file_line_count_ex * uniq_skiplist add function find_ge and support bidirection * connection_pool support validate connection on error * fast_task_queue.[hc]: free_queue support init_callback * ini_file_reader.c: use mutex lock when access dynamic content array * uniq_skiplist add function uniq_skiplist_replace_ex * add files: fc_queue.[hc] * add files: fc_memory.[hc] * add files: shared_buffer.[hc] * add files: thread_pool.[hc] * shared_func.[hc]: add function fc_path_contains * fast_mblock.[hc]: support alloc elements limit * sockopt.[hc]: add function asyncconnectserverbyip * add locked_timer.[hc]: time wheel timer with lock * tcp_quick_ack option for Linux Version 1.43 2019-12-25 * replace function call system to getExecResult, system is the deprecated function in iOS 11 * correct function skiplist_iterator in skiplist.h * add buffered_file_writer.[hc] * add function fc_delete_file_ex Version 1.42 2019-12-03 * add function get_gzip_command_filename * function create_work_threads changed Version 1.41 2019-09-30 * change CIDR network_bits range from [16, 32) to [10, 32) * ini_file_reader.c: fix empty string compare * multi_socket_client.c: code refine * sockopt.[hc] support IPv6 Version 1.40 2018-11-09 * add function conn_pool_parse_server_info and conn_pool_load_server_info * support directive: #@add_annotation, for example: #@add_annotation CONFIG_GET /usr/lib/libshmcache.so /etc/libshmcache.conf * add function fc_split_string and fc_match_delim * add json_parser.[hc] for parse json array and map * add function fc_strdup * add function fc_memmem * add function format_http_date * add function hash_find1 and hash_find2 * add function resolve_path and fast_buffer_append_file * add function id_generator_next_extra_ptr, with NULL pointer to set extra data to sn % (1 << extra_bits) Version 1.39 2018-07-31 * add #@function REPLACE_VARS * #@set value can embed %{VARIABLE} * shared_func.h: add function starts_with and ends_with * common_blocked_queue.h: add function common_blocked_queue_try_pop * sched_thread.c: fix first schedule time * ini_file_reader add function iniGetRequiredStrValueEx * add file fc_list.h * sockopt.c: add global variable try_again_when_interrupt Version 1.38 2018-06-26 * connection_pool.c: set err_no to 0 when success * shared_func.h: add functions float2buff / buff2float, double2buff / buff2double * logger.h: add function log_get_level_caption * add files: common_blocked_queue.[hc] * add files: multi_socket_client.[hc] * ioevent.[hc]: remove care_events in FreeBSD or MacOS * add skiplist_set.[hc] and skiplist bug fixed * correct CRC32 * shared_func.h: add functions int2str and long2str * sched_thread.h: add function sched_print_all_entries Version 1.37 2018-02-24 * ini_file_reader.c function annotations LOCAL_IP_GET support index, such as: #@function LOCAL_IP_GET bind_addr=private[0] Version 1.36 2017-03-08 * correct getFileContentEx read bytes Version 1.35 2017-03-02 * logger judge log_level in function log_it_ex and log_it_ex1 * add php extension function: fastcommon_file_put_contents * add function fc_safe_read and fc_safe_write * add function fc_ftok * add function fc_trim to avoid conflict with trim * ini_file_reader support annotataion map set incrementally * init context support dynamic annotations and build-in annotations * ini_file_reader disable shell execute in default Version 1.34 2017-02-06 * ini_file_reader: LOCAL_IP support CIDR addresses * ini_file_reader: return the last when get single value, such as iniGetStrValue and iniGetIntValue * ini_file_reader support #@set directive * ini_file_reader use extra context for compatible Version 1.33 2017-01-04 * add function hash_get_prime_capacity * refine getFileContent log info * show resource label when setrlimit fail Version 1.32 2016-12-01 * downgrade log level from warning to debug Version 1.31 2016-11-26 * move SET_SOCKOPT_NOSIGPIPE from sockopt.c to sockopt.h * add function get_time_item_from_str * add file trylock functions * add files: char_converter.h and char_converter.c * add files: char_convert_loader.h and char_convert_loader.c Version 1.30 2016-10-31 * modify php-fastcommon/test.php * php7_ext_wrapper.h: fix memory leak in php 7 * setsockopt SO_NOSIGPIPE when nessary * add function iovent_add_to_deleted_list * fixbug for select with microseconds * id generator support file mode Version 1.29 2016-06-17 * ini_file_reader support #@if * ini_file_reader support #@for * add function id_generator_get_timestamp Version 1.28 2016-06-08 * id generator support extra bits * change inet_aton to inet_pton * connect by ip and connection pool support ipv6 * id generator in php extension support multi instance * add function http_parse_url_params * check g_free_queue.head == NULL before free_queue_realloc() Version 1.27 2016-04-15 * add function fd_set_cloexec * php-fastcommon.spec.in support PHP 7 * add file lock and unlock functions * add id generator for multi processes * php extension support id generator Version 1.26 2016-03-16 * add logger parameter: compress_log_days_before Version 1.25 2016-03-01 * php7_ext_wrapper.h add more macro defines * compile passed in FreeBSD 10.2 * bugfixed: free task point correctly in free_queue_destroy * logger support compress the log file Version 1.24 2016-02-15 * php extension compiled on PHP 7 * add skiplist which support stable sort * make.sh: use sed to replace perl * support get local mac addresses * add system_info.h and system_info.c * add function get_mounted_filesystems * add function get_processes for Linux * ini_file_reader add iniGetSectionNames and iniGetSectionItems * add fast_blocked_queue.[hc] * iovent bug fixed for FreeBSD * sysinfo for FreeBSD * add php7_ext_wrapper.h for php7 migration Version 1.23 2015-11-16 * sched_thread.c: task can execute in a new thread * sched_thread.c: support delay tasks * add function get_current_time_us and get_current_time_ms * mblock add stat function * add function get_sys_total_mem_size and get_sys_cpu_count, ONLY support Linux and FreeBSD * delay task can execute in a new thread * fast_mblock reclaimed object pool * add fast_allocator * add fast_buffer Version 1.22 2015-10-10 * export php function: fastcommon_get_first_local_ip * add function is_private_ip * add function get_next_local_ip * export php function: fastcommon_get_next_local_ip * export php function: fastcommon_is_private_ip Version 1.21 2015-09-14 * ini_file_reader support annotation function * correct PTHREAD_MUTEX_ERRORCHECK define * support 32 bit OS * allow_ips support CIDR addresses such as 172.16.12.0/22 * add function get_first_local_ip * ioevent for BSD ok * iniGetValues use iniGetValuesEx Version 1.20 2015-08-06 * add GEO function get_line_distance_km Version 1.19 2015-07-24 * correct logger rotate time near 0 clock Version 1.18 2015-07-15 * OS macro defines put in _os_define.h * remove file _os_bits.h * schedule task support second field Version 1.17 2015-07-14 * ini_file_reader.c change PJWHash to Time33Hash and increase capacity * ini_file_reader.c realloc change to malloc and memcpy Version 1.16 2015-07-01 * fast_mblock add fast_mblock_delay_free * add fast_mpool.h and fast_mpool.c Version 1.15 2015-06-16 * fast_mblock.c support none lock * ioevent support set timeout * fast_mblock support alloc and free object * ini_file_reader set global section before and after directive #include Version 1.14 2015-06-12 * fast_task_info support set_buffer_size and realloc_buffer * use file lock when write logger header * bugfixed: sockopt.c correct fsbytes to sbytes in FreeBSD * macro FDFS_WRITE_BUFF_SIZE change to FAST_WRITE_BUFF_SIZE * logger.c call log_check_rotate in lock * bug fixed: log header correctly when rotate Version 1.13 2015-02-27 * support php extension * php extention export simple_hash and time33_hash * set_run_by log more info Version 1.12 2014-12-05 * bug fixed: must check the return value of vsnprintf * can call sched_add_entries many times before schedule Version 1.11 2014-11-20 * remove usleep call in logger.c * bug fixed: NOT set last_block->next when realloc Version 1.10 2014-10-31 * correct iovent macro define * must set timeout entry's dlink to NULL because NOT in time wheel Version 1.09 2014-10-26 * Version struct add variable: patch * get local ipaddr support interface based 1 * mblock support alloc_init_func Version 1.08 2014-10-09 * sched_thread.c: calculate next_call_time correctly Version 1.07 2014-09-16 * increment alloc task buffer * add function free_queue_alloc_connections * check file size before log access header * conn_pool_destroy close connections and free memory * delete log old files with any time format affix Version 1.06 2014-08-27 * update source code from FastDFS V5.02 * add function short2buff and buff2short * add object memory pool (fast_mblock.h and fast_mblock.c) * add member thread_loop_callback in nio_thread_data * bug fixed: ini_file_reader.c can't include relative path sub config, such as #include ../../conf/common.conf * add get_url_content_ex to support buffer passed by caller * logger can set rotate time format * add connection pool * logger can log header line * #include to use C99 bool * add libfastcommon.spec for building RPM * logger can delete old rotated files * bug fixed: connection pool should NOT increase counter when connect fail * logger.c do NOT call fsync after write * sockopt.c add tcprecvdata_nb_ms to support millisecond timeout * change req_count from int to int64_t * logger can take over stderr and stdout * replace INT64_PRINTF_FORMAT with PRId64 * support OS Darwin * socket send and recv ignore erno EINTR * http_parse_query_ex support binary buffer, and set both lengths of key and name * add function ioevent_remove * add function log_reopen_ex * extern function log_rotate * add function log_set_fd_flags Version 1.05 2012-07-08 * update source code from FastDFS V3.09 Version 1.04 2011-01-31 * update source code from FastDFS V2.08 Version 1.03 2010-11-16 * add local ip functions local_ip_func.c Version 1.02 2010-07-02 * sockopt.c: tcprecvfile and tcpdiscard add parameter total_recv_bytes * sockopt.h add non-block connect function connectserverbyip_nb * log_init set log to cache to false (no cache) Version 1.01 2010-05-15 * source file move to directory src * header files add comments * logger.h: correct function name from log_destory_ex to log_destroy_ex * shared_func.h: getExeAbsolutePath change to getAbsolutePath Version 1.00 2010-05-08 * first version