C-Menu 0.2.9
A User Interface Toolkit
Loading...
Searching...
No Matches
futil.c File Reference

General utility functions. More...

#include <cm.h>
#include <stdint.h>
#include <arpa/inet.h>
#include <ctype.h>
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
#include <grp.h>
#include <ifaddrs.h>
#include <pwd.h>
#include <regex.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <termios.h>
#include <time.h>
#include <unistd.h>
#include <wait.h>
Include dependency graph for futil.c:

Go to the source code of this file.

Macros

#define LF_DIR   2
#define LF_LNK   1
#define LF_REG   4

Functions

unsigned long a_to_ul (const char *str)
 Converts a string to an unsigned long long integer, with support for suffixes K, M, and G for kilobytes, megabytes, and gigabytes respectively.
int a_toi (char *s, bool *a_toi_error)
 a safer alternative to atoi() for converting ASCII strings to integers.
bool base_name (char *buf, char *path)
 Returns the base name of a file specification.
size_t canonicalize_file_spec (char *spec)
 Removes quotes and trims at first space.
bool chrep (char *s, char old_chr, char new_chr)
 Replaces all occurrences of old_chr in s with new_chr in place.
int destroy_argv (int argc, char **argv)
 Deallocates memory allocated for argument strings in argv.
bool dir_name (char *buf, char *path)
 Returns the directory name of a file specification.
bool expand_tilde (char *str, int path_maxlen)
 Replaces "~/" in string with the user's home directory.
bool file_spec_name (char *fn, char *fs)
 extracts the file name component of a file specification
bool file_spec_path (char *fp, char *fs)
 extracts the path component of a file specification
char * format_local_timestamp (time_t t, char *buf, size_t n)
 Formats a time_t as an ISO 8601 string in local time.
String free_string (String string)
 Free the dynamically allocated String.
char * get_ip_addresses (char *ip_str, int maxlen)
 Retrieves the IP addresses of the local machine and formats them into a string.
char * get_local_timestamp ()
 Returns the current local time as an ISO 8601 formatted string.
char * get_user_str (char *user_str, size_t maxlen)
 Retrieves the current user's name and UID, and formats it into a string.
bool is_directory (const char *path)
 Checks if the given path is a directory.
bool is_symlink_to_dir (const char *path)
 Checks if the given path is a symbolic link to a directory.
bool is_valid_regex (const char *pattern)
 Checks if the given regular expression pattern is valid.
char * iso8601_time (char *buf, int n, time_t *t, bool local)
 Formats a struct tm as an ISO 8601 string.
bool locate_file_in_path (char *file_spec, char *file_name)
 Locates a file in the system PATH.
bool mk_dir (char *dir)
 If directory doesn't exist, make it.
String mk_string (size_t l)
 Create a String struct with a dynamically allocated string.
bool normalize_file_spec (char *fs)
 replace backslashes with forward lashes
void open_cmenu_log ()
 Open new C-Menu log file.
bool parse_local_timestamp (const char *s, time_t *out)
 Parses an ISO 8601 timestamp string in local time and converts it to time_t.
char * rep_substring (const char *org_s, const char *tgt_s, const char *rep_s)
 Replace all occurrences of "tgt_s" in "org_s" with "rep_s".
size_t rtrim (char *s)
 Trims trailing spaces from string s in place.
int segmentation_fault ()
 Function to intentionally cause a segmentation fault for testing purposes.
size_t ssnprintf (char *buf, size_t buf_size, const char *format,...)
 ssnprintf was designed to be a safer alternative to snprintf.
bool str_subc (char *d, char *s, char ReplaceChr, char *Withstr, int l)
 Replaces "ReplaceChr" in "s" with "Withstr" in "d" won't copy more than "l" bytes to "d" Replaces all occurrences of a character in a string with another string, copying the result to a destination buffer.
int str_to_args (char **argv, char *arg_str, int max_args)
 Converts a string into an array of argument strings.
bool str_to_bool (const char *s)
 Converts String to boolean true or false.
double str_to_double (char *s)
 converts string to double
bool str_to_lower (char *s)
 Converts a string to lowercase.
bool str_to_upper (char *s)
 Converts a string to uppercase.
size_t string_cat (String *dest, const String *src)
 Concatenates src String to dest String, allocating additional memory for dest String if necessary.
size_t string_cpy (String *dest, const String *src)
 Copy src String to dest String, allocating additional memory for dest String if necessary.
size_t string_ncat (String *dest, const String *src, size_t n)
 Concatenates up to n characters from src String to dest String, allocating additional memory for dest String if necessary.
size_t string_ncpy (String *dest, const String *src, size_t n)
 copies up to n characters from src String to dest String, allocating additional memory for dest String if necessary
size_t strip_ansi (char *d, char *s)
 Strips ANSI SGR escape sequences (ending in 'm') from string s to d.
bool strip_quotes (char *s)
 removes leading and trailing double quotes if present
bool stripz_quotes (char *s)
 removes leading and trailing double quotes if present
bool strnfill (char *s, char c, int n)
 Fills string s with character c n.
size_t strnlf (char *s, size_t max_len)
 terminates string with line feed
size_t strnz (char *s, size_t max_len)
 terminates string at New Line, Carriage Return, or max_len
size_t strnz__cat (char *d, const char *s, size_t max_len)
 safer alternative to strncat
size_t strnz__cpy (char *d, const char *s, size_t max_len)
 safer alternative to strncpy
char * strnz_dup (char *s, size_t l)
 Allocates memory for and duplicates string s up to length l or until line feed or carriage return.
size_t strz (char *s)
 Terminates string at new line or carriage return.
String to_string (const char *s)
 String functions provide a simple string library to facilitate string manipulation in C, allowing developers to easily create, copy, concatenate, and free strings without having to manage memory manually.
size_t trim (char *s)
 Trims leading and trailing spaces from string s in place.
bool trim_ext (char *buf, char *filename)
 trims the file extension from "filename" and copies the result to "buf"
bool trim_path (char *dir)
 Trims trailing spaces and slashes from directory path in place.
bool verify_dir (char *spec, int imode)
 Verifies that the directory specified by "spec" exists and is accessible with the permissions specified by "imode".
bool verify_file (char *in_spec, int imode)
 Verifies that the file specified by "in_spec" exists and is accessible with the permissions specified by "imode".
int wccp_to_str (wchar_t cp, uint8_t *buffer)
 Converts a Unicode code point to a UTF-8 encoded string.
void write_cmenu_log (char *msg)
 Write message to C-Menu log file with timestamp.
void write_cmenu_log_nt (char *msg)
 Write message to C-Menu log file without timestamp.

Variables

int cmenu_log_fd
char earg_str [MAXLEN]
int eargc
char * eargv [MAXARGS]
char errmsg [MAXLEN]
error_info_t error_info
error_source_t error_source
int wait_timeout

Detailed Description

General utility functions.

Author
Bill Waller Copyright (c) 2025 MIT License billx.nosp@m.wall.nosp@m.er@gm.nosp@m.ail..nosp@m.com
Date
2026-02-09

Definition in file futil.c.

Macro Definition Documentation

◆ LF_DIR

#define LF_DIR   2

Definition at line 43 of file futil.c.

◆ LF_LNK

#define LF_LNK   1

Definition at line 42 of file futil.c.

◆ LF_REG

#define LF_REG   4

Definition at line 44 of file futil.c.

Function Documentation

◆ mk_string()

String mk_string ( size_t l)

Create a String struct with a dynamically allocated string.

Parameters
llength of string to create including null terminator
Returns
String struct

The returned String struct contains a dynamically allocated string of he specified length

Note
the caller is responsible for calling free_string to free the allocated memory.

Definition at line 1404 of file futil.c.

1405 {
1406 if (l == 0) {
1407 String str;
1408 str.l = 0;
1409 str.s = nullptr;
1410 return str;
1411 }
1412 String str;
1413 str.l = l + 1;
1414 str.s = (char *)malloc(str.l);
1415 str.s[0] = '\0';
1416 return str;
The String structure represents a string object with a pointer to the string and its allocated length...
Definition cm.h:653
size_t l
Definition cm.h:655
char * s
Definition cm.h:654

References String::l, and String::s.

◆ rtrim()

size_t rtrim ( char * s)

Trims trailing spaces from string s in place.

Parameters
s- string to trim
Returns
length of trimmed string

Definition at line 229 of file futil.c.

229 {
230 if (s == nullptr || *s == '\0')
231 return (size_t)0;
232 char *p = s + strlen(s) - 1;
233 while (p >= s && *p == ' ')
234 p--;
235 *(p + 1) = '\0';
236 return (size_t)(p - s + 1);
237}

Referenced by fmt_line(), and picker().

Here is the caller graph for this function:

◆ str_to_bool()

bool str_to_bool ( const char * s)

Converts String to boolean true or false.

Parameters
s- string to convert
Returns
boolean true or false

Definition at line 875 of file futil.c.

876 {
877 if (s == nullptr || *s == '\0')
878 return false;
879 switch (s[0]) {
880 case 't':
881 case 'T':
882 case 'y':
883 case 'Y':
884 case '1':
885 return true;
886 case 'o':
887 case 'O':
888 switch (s[1]) {
889 case 'n':
890 case 'N':
891 return true;
892 default:
893 break;
894 }
895 default:
896 break;
897 }
898 return false;

Referenced by parse_config().

Here is the caller graph for this function:

Variable Documentation

◆ cmenu_log_fd

int cmenu_log_fd

Definition at line 48 of file futil.c.

Referenced by open_cmenu_log(), write_cmenu_log(), and write_cmenu_log_nt().

◆ earg_str

char earg_str[MAXLEN]

Definition at line 50 of file futil.c.

◆ eargc

int eargc

Definition at line 51 of file futil.c.

◆ eargv

char* eargv[MAXARGS]

Definition at line 52 of file futil.c.

◆ errmsg

char errmsg[MAXLEN]

Global variables for error reporting

Definition at line 130 of file futil.c.

◆ error_info

error_info_t error_info

Definition at line 142 of file futil.c.

◆ error_source

error_source_t error_source

Definition at line 143 of file futil.c.

◆ wait_timeout

int wait_timeout