Proper strings, drop non POSIX strdup

This commit is contained in:
Bastien Dejean 2012-09-10 13:47:51 +02:00
parent f96be0b22e
commit aa1c50417d
8 changed files with 37 additions and 49 deletions

View file

@ -6,6 +6,7 @@
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define BOOLSTR(A) ((A) ? "true" : "false")
#define MAXLEN 256
#define MOVE_RESIZE_MASK XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT
#if 1

View file

@ -1,5 +1,3 @@
#define _BSD_SOURCE
#include <stdio.h>
#include <string.h>
#include <lua.h>
@ -24,19 +22,15 @@ int has_table(lua_State *L, char *name)
return result;
}
char *string_expr(lua_State *L, char *expr, char* fallback)
void string_expr(lua_State *L, char *dest, char *expr, const char* fallback)
{
char *result;
if (eval_expr(L, expr) == 0) {
if (lua_isstring(L, -1))
result = strdup(lua_tostring(L, -1));
strncpy(dest, lua_tostring(L, -1), sizeof(dest));
else if (fallback != NULL)
result = strdup(fallback);
else
result = NULL;
strncpy(dest, fallback, sizeof(dest));
lua_pop(L, 1);
}
return result;
}
double double_expr(lua_State *L, char *expr, double fallback)

View file

@ -7,7 +7,7 @@
int eval_expr(lua_State *, char *);
int has_table(lua_State *, char *);
char *string_expr(lua_State *, char *, char *);
void string_expr(lua_State *, char *, char *, const char *);
double double_expr(lua_State *, char *, double);
int int_expr(lua_State *, char *, int);
bool bool_expr(lua_State *, char *, bool);

View file

@ -1,5 +1,3 @@
#define _BSD_SOURCE
#include <string.h>
#include <stdlib.h>
#include "helpers.h"
@ -101,32 +99,25 @@ void set_setting(char *name, char *value)
} else if (strcmp(name, "bottom_padding") == 0) {
sscanf(value, "%i", &bottom_padding);
} else if (strcmp(name, "normal_border_color") == 0) {
free(normal_border_color);
normal_border_color = strdup(value);
strncpy(normal_border_color, value, sizeof(normal_border_color));
normal_border_color_pxl = get_color(normal_border_color);
} else if (strcmp(name, "active_border_color") == 0) {
free(active_border_color);
active_border_color = strdup(value);
strncpy(active_border_color, value, sizeof(active_border_color));
active_border_color_pxl = get_color(active_border_color);
} else if (strcmp(name, "inner_border_color") == 0) {
free(inner_border_color);
inner_border_color = strdup(value);
strncpy(inner_border_color, value, sizeof(inner_border_color));
inner_border_color_pxl = get_color(inner_border_color);
} else if (strcmp(name, "outer_border_color") == 0) {
free(outer_border_color);
outer_border_color = strdup(value);
strncpy(outer_border_color, value, sizeof(outer_border_color));
outer_border_color_pxl = get_color(outer_border_color);
} else if (strcmp(name, "presel_border_color") == 0) {
free(presel_border_color);
presel_border_color = strdup(value);
strncpy(presel_border_color, value, sizeof(presel_border_color));
presel_border_color_pxl = get_color(presel_border_color);
} else if (strcmp(name, "locked_border_color") == 0) {
free(locked_border_color);
locked_border_color = strdup(value);
strncpy(locked_border_color, value, sizeof(locked_border_color));
locked_border_color_pxl = get_color(locked_border_color);
} else if (strcmp(name, "wm_name") == 0) {
free(wm_name);
wm_name = strdup(value);
strncpy(wm_name, value, sizeof(wm_name));
} else if (strcmp(name, "adaptive_window_border") == 0) {
if (is_bool(value))
adaptive_window_border = parse_bool(value);

View file

@ -1,5 +1,3 @@
#define _BSD_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -33,12 +31,12 @@ void load_settings(void)
void apply_settings(lua_State *L)
{
normal_border_color = string_expr(L, "normal_border_color", NORMAL_BORDER_COLOR);
active_border_color = string_expr(L, "active_border_color", ACTIVE_BORDER_COLOR);
inner_border_color = string_expr(L, "inner_border_color", INNER_BORDER_COLOR);
outer_border_color = string_expr(L, "outer_border_color", OUTER_BORDER_COLOR);
presel_border_color = string_expr(L, "presel_border_color", PRESEL_BORDER_COLOR);
locked_border_color = string_expr(L, "locked_border_color", LOCKED_BORDER_COLOR);
string_expr(L, normal_border_color, "normal_border_color", NORMAL_BORDER_COLOR);
string_expr(L, active_border_color, "active_border_color", ACTIVE_BORDER_COLOR);
string_expr(L, inner_border_color, "inner_border_color", INNER_BORDER_COLOR);
string_expr(L, outer_border_color, "outer_border_color", OUTER_BORDER_COLOR);
string_expr(L, presel_border_color, "presel_border_color", PRESEL_BORDER_COLOR);
string_expr(L, locked_border_color, "locked_border_color", LOCKED_BORDER_COLOR);
normal_border_color_pxl = get_color(normal_border_color);
active_border_color_pxl = get_color(active_border_color);
@ -47,7 +45,7 @@ void apply_settings(lua_State *L)
presel_border_color_pxl = get_color(presel_border_color);
locked_border_color_pxl = get_color(locked_border_color);
wm_name = string_expr(L, "wm_name", WM_NAME);
string_expr(L, wm_name, "wm_name", WM_NAME);
adaptive_window_border = bool_expr(L, "adaptive_window_border", ADAPTIVE_WINDOW_BORDER);
adaptive_window_gap = bool_expr(L, "adaptive_window_gap", ADAPTIVE_WINDOW_GAP);

View file

@ -32,14 +32,14 @@
#define PRESEL_BORDER_COLOR "#331122"
#define LOCKED_BORDER_COLOR "#331122"
char *normal_border_color;
char *active_border_color;
char *inner_border_color;
char *outer_border_color;
char *presel_border_color;
char *locked_border_color;
char normal_border_color[MAXLEN];
char active_border_color[MAXLEN];
char inner_border_color[MAXLEN];
char outer_border_color[MAXLEN];
char presel_border_color[MAXLEN];
char locked_border_color[MAXLEN];
char *wm_name;
char wm_name[MAXLEN];
uint32_t normal_border_color_pxl;
uint32_t active_border_color_pxl;

15
types.c
View file

@ -1,5 +1,3 @@
#define _BSD_SOURCE
#include <stdlib.h>
#include <string.h>
#include <xcb/xcb.h>
@ -20,7 +18,7 @@ node_t *make_node(void)
desktop_t *make_desktop(void)
{
desktop_t *d = malloc(sizeof(desktop_t));
d->name = strdup(DESK_NAME);
strncpy(d->name, DESK_NAME, sizeof(d->name));
d->layout = LAYOUT_TILED;
d->prev = d->next = NULL;
d->root = d->focus = d->last_focus = NULL;
@ -31,8 +29,13 @@ client_t *make_client(xcb_window_t win)
{
client_t *c = malloc(sizeof(client_t));
c->window = win;
c->floating = false;
c->fullscreen = false;
c->locked = false;
c->floating = c->fullscreen = c->locked = false;
return c;
}
rule_t *make_rule(void)
{
rule_t *r = malloc(sizeof(rule_t));
r->floating = r->fullscreen = r->locked = r->centered = false;
return r;
}

View file

@ -78,7 +78,7 @@ struct node_t {
typedef struct desktop_t desktop_t;
struct desktop_t {
char *name;
char name[MAXLEN];
layout_t layout;
node_t *root;
node_t *focus;
@ -95,6 +95,7 @@ struct rule_t {
bool floating;
bool fullscreen;
bool locked;
bool centered;
rule_t *next;
};