Function movements
* string functions mstr*() are moved to string_utils.c * allocation wrappers are moved to utils.h * printf_* functions are moved to log.h Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
parent
c2c16fb8a1
commit
0cebbc370a
3
src/c2.c
3
src/c2.c
|
@ -30,6 +30,7 @@
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "c2.h"
|
#include "c2.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
#define C2_MAX_LEVELS 10
|
#define C2_MAX_LEVELS 10
|
||||||
|
|
||||||
|
@ -218,8 +219,6 @@ static const c2_predef_t C2_PREDEFS[] = {
|
||||||
[C2_L_PROLE ] = { "role" , C2_L_TSTRING , 0 },
|
[C2_L_PROLE ] = { "role" , C2_L_TSTRING , 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define mstrncmp(s1, s2) strncmp((s1), (s2), strlen(s1))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare next word in a string with another string.
|
* Compare next word in a string with another string.
|
||||||
*/
|
*/
|
||||||
|
|
123
src/common.h
123
src/common.h
|
@ -64,8 +64,6 @@
|
||||||
|
|
||||||
#define MAX_ALPHA (255)
|
#define MAX_ALPHA (255)
|
||||||
|
|
||||||
#define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
|
|
||||||
|
|
||||||
// === Includes ===
|
// === Includes ===
|
||||||
|
|
||||||
// For some special functions
|
// For some special functions
|
||||||
|
@ -129,30 +127,6 @@
|
||||||
/// @brief Wrapper for gcc branch prediction builtin, for unlikely branch.
|
/// @brief Wrapper for gcc branch prediction builtin, for unlikely branch.
|
||||||
#define unlikely(x) __builtin_expect(!!(x), 0)
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||||||
|
|
||||||
/// Print out an error message.
|
|
||||||
#define printf_err(format, ...) \
|
|
||||||
fprintf(stderr, format "\n", ## __VA_ARGS__)
|
|
||||||
|
|
||||||
/// Print out an error message with function name.
|
|
||||||
#define printf_errf(format, ...) \
|
|
||||||
printf_err("%s" format, __func__, ## __VA_ARGS__)
|
|
||||||
|
|
||||||
/// Print out an error message with function name, and quit with a
|
|
||||||
/// specific exit code.
|
|
||||||
#define printf_errfq(code, format, ...) { \
|
|
||||||
printf_err("%s" format, __func__, ## __VA_ARGS__); \
|
|
||||||
exit(code); \
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Print out a debug message.
|
|
||||||
#define printf_dbg(format, ...) \
|
|
||||||
printf(format, ## __VA_ARGS__); \
|
|
||||||
fflush(stdout)
|
|
||||||
|
|
||||||
/// Print out a debug message with function name.
|
|
||||||
#define printf_dbgf(format, ...) \
|
|
||||||
printf_dbg("%s" format, __func__, ## __VA_ARGS__)
|
|
||||||
|
|
||||||
// Use #s here to prevent macro expansion
|
// Use #s here to prevent macro expansion
|
||||||
/// Macro used for shortening some debugging code.
|
/// Macro used for shortening some debugging code.
|
||||||
#define CASESTRRET(s) case s: return #s
|
#define CASESTRRET(s) case s: return #s
|
||||||
|
@ -221,8 +195,6 @@
|
||||||
typedef long time_ms_t;
|
typedef long time_ms_t;
|
||||||
typedef struct _c2_lptr c2_lptr_t;
|
typedef struct _c2_lptr c2_lptr_t;
|
||||||
|
|
||||||
// Or use cmemzero().
|
|
||||||
|
|
||||||
/// Structure representing needed window updates.
|
/// Structure representing needed window updates.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool shadow : 1;
|
bool shadow : 1;
|
||||||
|
@ -998,37 +970,6 @@ print_backtrace(void) {
|
||||||
|
|
||||||
// === Functions ===
|
// === Functions ===
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Quit if the passed-in pointer is empty.
|
|
||||||
*/
|
|
||||||
static inline void *
|
|
||||||
allocchk_(const char *func_name, void *ptr) {
|
|
||||||
if (!ptr) {
|
|
||||||
printf_err("%s(): Failed to allocate memory.", func_name);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @brief Wrapper of allocchk_().
|
|
||||||
#define allocchk(ptr) allocchk_(__func__, ptr)
|
|
||||||
|
|
||||||
/// @brief Wrapper of malloc().
|
|
||||||
#define cmalloc(nmemb, type) ((type *) allocchk(malloc((nmemb) * sizeof(type))))
|
|
||||||
|
|
||||||
/// @brief Wrapper of calloc().
|
|
||||||
#define ccalloc(nmemb, type) ((type *) allocchk(calloc((nmemb), sizeof(type))))
|
|
||||||
|
|
||||||
/// @brief Wrapper of ealloc().
|
|
||||||
#define crealloc(ptr, nmemb, type) ((type *) allocchk(realloc((ptr), (nmemb) * sizeof(type))))
|
|
||||||
|
|
||||||
/// @brief Zero out the given memory block.
|
|
||||||
#define cmemzero(ptr, size) memset((ptr), 0, (size))
|
|
||||||
|
|
||||||
/// @brief Wrapper of cmemzero() that handles a pointer to a single item, for
|
|
||||||
/// convenience.
|
|
||||||
#define cmemzero_one(ptr) cmemzero((ptr), sizeof(*(ptr)))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return whether a struct timeval value is empty.
|
* Return whether a struct timeval value is empty.
|
||||||
*/
|
*/
|
||||||
|
@ -1189,70 +1130,6 @@ print_timestamp(session_t *ps) {
|
||||||
fprintf(stderr, "[ %5ld.%06ld ] ", diff.tv_sec, diff.tv_usec);
|
fprintf(stderr, "[ %5ld.%06ld ] ", diff.tv_sec, diff.tv_usec);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate the space and copy a string.
|
|
||||||
*/
|
|
||||||
static inline char *
|
|
||||||
mstrcpy(const char *src) {
|
|
||||||
char *str = cmalloc(strlen(src) + 1, char);
|
|
||||||
|
|
||||||
strcpy(str, src);
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate the space and copy a string.
|
|
||||||
*/
|
|
||||||
static inline char *
|
|
||||||
mstrncpy(const char *src, unsigned len) {
|
|
||||||
char *str = cmalloc(len + 1, char);
|
|
||||||
|
|
||||||
strncpy(str, src, len);
|
|
||||||
str[len] = '\0';
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate the space and join two strings.
|
|
||||||
*/
|
|
||||||
static inline char *
|
|
||||||
mstrjoin(const char *src1, const char *src2) {
|
|
||||||
char *str = cmalloc(strlen(src1) + strlen(src2) + 1, char);
|
|
||||||
|
|
||||||
strcpy(str, src1);
|
|
||||||
strcat(str, src2);
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allocate the space and join two strings;
|
|
||||||
*/
|
|
||||||
static inline char *
|
|
||||||
mstrjoin3(const char *src1, const char *src2, const char *src3) {
|
|
||||||
char *str = cmalloc(strlen(src1) + strlen(src2)
|
|
||||||
+ strlen(src3) + 1, char);
|
|
||||||
|
|
||||||
strcpy(str, src1);
|
|
||||||
strcat(str, src2);
|
|
||||||
strcat(str, src3);
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Concatenate a string on heap with another string.
|
|
||||||
*/
|
|
||||||
static inline void
|
|
||||||
mstrextend(char **psrc1, const char *src2) {
|
|
||||||
*psrc1 = crealloc(*psrc1, (*psrc1 ? strlen(*psrc1): 0) + strlen(src2) + 1,
|
|
||||||
char);
|
|
||||||
|
|
||||||
strcat(*psrc1, src2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a VSync option argument.
|
* Parse a VSync option argument.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "x.h"
|
#include "x.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "diagnostic.h"
|
#include "diagnostic.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
#define auto __auto_type
|
#define auto __auto_type
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,11 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "config.h"
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "c2.h"
|
#include "c2.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a long number.
|
* Parse a long number.
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper of libconfig's <code>config_lookup_int</code>.
|
* Wrapper of libconfig's <code>config_lookup_int</code>.
|
||||||
|
|
|
@ -9,8 +9,10 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "dbus.h"
|
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
|
#include "dbus.h"
|
||||||
|
|
||||||
static DBusHandlerResult
|
static DBusHandlerResult
|
||||||
cdbus_process(DBusConnection *conn, DBusMessage *m, void *);
|
cdbus_process(DBusConnection *conn, DBusMessage *m, void *);
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
// Copyright (c) 2018 Yuxuan Shui <yshuiv7@gmail.com>
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/// Print out an error message.
|
||||||
|
#define printf_err(format, ...) \
|
||||||
|
fprintf(stderr, format "\n", ## __VA_ARGS__)
|
||||||
|
|
||||||
|
/// Print out an error message with function name.
|
||||||
|
#define printf_errf(format, ...) \
|
||||||
|
printf_err("%s" format, __func__, ## __VA_ARGS__)
|
||||||
|
|
||||||
|
/// Print out an error message with function name, and quit with a
|
||||||
|
/// specific exit code.
|
||||||
|
#define printf_errfq(code, format, ...) { \
|
||||||
|
printf_err("%s" format, __func__, ## __VA_ARGS__); \
|
||||||
|
exit(code); \
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Print out a debug message.
|
||||||
|
#define printf_dbg(format, ...) \
|
||||||
|
printf(format, ## __VA_ARGS__); \
|
||||||
|
fflush(stdout)
|
||||||
|
|
||||||
|
/// Print out a debug message with function name.
|
||||||
|
#define printf_dbgf(format, ...) \
|
||||||
|
printf_dbg("%s" format, __func__, ## __VA_ARGS__)
|
|
@ -4,7 +4,7 @@ deps = [
|
||||||
dependency('xcb', version: '>=1.9.2')
|
dependency('xcb', version: '>=1.9.2')
|
||||||
]
|
]
|
||||||
|
|
||||||
srcs = ['compton.c', 'win.c', 'c2.c', 'x.c', 'config.c', 'diagnostic.c']
|
srcs = ['compton.c', 'win.c', 'c2.c', 'x.c', 'config.c', 'diagnostic.c', 'string_utils.c']
|
||||||
|
|
||||||
cflags = []
|
cflags = []
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "string_utils.h"
|
||||||
#include "opengl.h"
|
#include "opengl.h"
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "string_utils.h"
|
||||||
|
#include "utils.h"
|
||||||
|
/**
|
||||||
|
* Allocate the space and copy a string.
|
||||||
|
*/
|
||||||
|
char *mstrcpy(const char *src) {
|
||||||
|
char *str = cmalloc(strlen(src) + 1, char);
|
||||||
|
|
||||||
|
strcpy(str, src);
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate the space and copy a string.
|
||||||
|
*/
|
||||||
|
char *mstrncpy(const char *src, unsigned len) {
|
||||||
|
char *str = cmalloc(len + 1, char);
|
||||||
|
|
||||||
|
strncpy(str, src, len);
|
||||||
|
str[len] = '\0';
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate the space and join two strings.
|
||||||
|
*/
|
||||||
|
char *mstrjoin(const char *src1, const char *src2) {
|
||||||
|
char *str = cmalloc(strlen(src1) + strlen(src2) + 1, char);
|
||||||
|
|
||||||
|
strcpy(str, src1);
|
||||||
|
strcat(str, src2);
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allocate the space and join two strings;
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
mstrjoin3(const char *src1, const char *src2, const char *src3) {
|
||||||
|
char *str = cmalloc(strlen(src1) + strlen(src2)
|
||||||
|
+ strlen(src3) + 1, char);
|
||||||
|
|
||||||
|
strcpy(str, src1);
|
||||||
|
strcat(str, src2);
|
||||||
|
strcat(str, src3);
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Concatenate a string on heap with another string.
|
||||||
|
*/
|
||||||
|
void mstrextend(char **psrc1, const char *src2) {
|
||||||
|
*psrc1 = crealloc(*psrc1, (*psrc1 ? strlen(*psrc1): 0) + strlen(src2) + 1,
|
||||||
|
char);
|
||||||
|
|
||||||
|
strcat(*psrc1, src2);
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
// Copyright (c) Yuxuan Shui <yshuiv7@gmail.com>
|
||||||
|
#pragma once
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define mstrncmp(s1, s2) strncmp((s1), (s2), strlen(s1))
|
||||||
|
|
||||||
|
char *mstrcpy(const char *src);
|
||||||
|
char *mstrncpy(const char *src, unsigned len);
|
||||||
|
char *mstrjoin(const char *src1, const char *src2);
|
||||||
|
char *
|
||||||
|
mstrjoin3(const char *src1, const char *src2, const char *src3);
|
||||||
|
void mstrextend(char **psrc1, const char *src2);
|
||||||
|
|
||||||
|
static inline const char *
|
||||||
|
skip_space_const(const char *src) {
|
||||||
|
if (!src)
|
||||||
|
return NULL;
|
||||||
|
while (*src && isspace(*src))
|
||||||
|
src++;
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline char *
|
||||||
|
skip_space_mut(char *src) {
|
||||||
|
if (!src)
|
||||||
|
return NULL;
|
||||||
|
while (*src && isspace(*src))
|
||||||
|
src++;
|
||||||
|
return src;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define skip_space(x) _Generic((x), \
|
||||||
|
char *: skip_space_mut, \
|
||||||
|
const char *: skip_space_const \
|
||||||
|
)(x)
|
50
src/utils.h
50
src/utils.h
|
@ -5,7 +5,14 @@
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
|
#define ARR_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))
|
||||||
|
|
||||||
#ifdef __FAST_MATH__
|
#ifdef __FAST_MATH__
|
||||||
#warning Use of -ffast-math can cause rendering error or artifacts, \
|
#warning Use of -ffast-math can cause rendering error or artifacts, \
|
||||||
|
@ -94,28 +101,33 @@ normalize_d(double d) {
|
||||||
return normalize_d_range(d, 0.0, 1.0);
|
return normalize_d_range(d, 0.0, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const char *
|
/**
|
||||||
skip_space_const(const char *src) {
|
* @brief Quit if the passed-in pointer is empty.
|
||||||
if (!src)
|
*/
|
||||||
return NULL;
|
static inline void *
|
||||||
while (*src && isspace(*src))
|
allocchk_(const char *func_name, void *ptr) {
|
||||||
src++;
|
if (!ptr) {
|
||||||
return src;
|
// Since memory allocation failed, we try to print
|
||||||
|
// this error message without any memory allocation.
|
||||||
|
const char msg[] = "(): Failed to allocate memory\n";
|
||||||
|
write(STDERR_FILENO, func_name, strlen(func_name));
|
||||||
|
write(STDERR_FILENO, msg, ARR_SIZE(msg));
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline char *
|
/// @brief Wrapper of allocchk_().
|
||||||
skip_space_mut(char *src) {
|
#define allocchk(ptr) allocchk_(__func__, ptr)
|
||||||
if (!src)
|
|
||||||
return NULL;
|
|
||||||
while (*src && isspace(*src))
|
|
||||||
src++;
|
|
||||||
return src;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define skip_space(x) _Generic((x), \
|
/// @brief Wrapper of malloc().
|
||||||
char *: skip_space_mut, \
|
#define cmalloc(nmemb, type) ((type *) allocchk(malloc((nmemb) * sizeof(type))))
|
||||||
const char *: skip_space_const \
|
|
||||||
)(x)
|
/// @brief Wrapper of calloc().
|
||||||
|
#define ccalloc(nmemb, type) ((type *) allocchk(calloc((nmemb), sizeof(type))))
|
||||||
|
|
||||||
|
/// @brief Wrapper of ealloc().
|
||||||
|
#define crealloc(ptr, nmemb, type) ((type *) allocchk(realloc((ptr), (nmemb) * sizeof(type))))
|
||||||
|
|
||||||
/// RC_TYPE generates a reference counted type from `type`
|
/// RC_TYPE generates a reference counted type from `type`
|
||||||
///
|
///
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "compton.h"
|
#include "compton.h"
|
||||||
#include "c2.h"
|
#include "c2.h"
|
||||||
#include "x.h"
|
#include "x.h"
|
||||||
|
#include "string_utils.h"
|
||||||
|
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue