#include <stdio.h> /* FILE, sprintf() */
#include <string.h> /* strchr(), strcmp(), strdup(), strlen() */
#include <unistd.h> /* optarg, getopt() */
-#include "../common/parse_file.h" /* EDIT_STARTED, parse_file(), parse_val(),
+#include "../common/parse_file.h" /* EDIT_STARTED, parse_file(),parse_flagval(),
* token_from_line(), parsetest_singlechar(),
* parse_and_reduce_to_readyflag(),
* parsetest_defcontext(),parse_unknown_arg(),
* parsetest_too_many_values(),
* parse_id_uniq(), parse_init_entry()
*/
-#include "../common/readwrite.h" /* try_fopen(), try_fclose_unlink_rename(),
- * try_fwrite()
+#include "../common/readwrite.h" /* atomic_write_start(), atomic_write_finish(),
+ * detect_atomic_leftover(), try_fwrite()
*/
#include "../common/rexit.h" /* exit_err(), exit_trouble() */
#include "../common/try_malloc.h" /* try_malloc() */
uint8_t * ord_flags,uint8_t kbd_flags,char * str_key,
struct Win * win, struct KeyBindingDB * kbdb)
{
- if ( parse_val(token0, token1, "NAME", win_flags,
- NAME_SET, 's', (char *) &win->title)
- || parse_val(token0, token1, "WIDTH", win_flags,
- WIDTH_SET, 'i', (char *) &win->target_width)
- || parse_val(token0, token1, "HEIGHT", win_flags,
- HEIGHT_SET, 'i', (char *) &win->target_height));
- else if (parse_val(token0, token1, "BREAK", win_flags,
- BREAK_SET, '8', (char *) &win->linebreak))
+ if ( parse_flagval(token0, token1, "NAME", win_flags,
+ NAME_SET, 's', (char *) &win->title)
+ || parse_flagval(token0, token1, "WIDTH", win_flags,
+ WIDTH_SET, 'i', (char *) &win->target_width)
+ || parse_flagval(token0, token1, "HEIGHT", win_flags,
+ HEIGHT_SET, 'i', (char *) &win->target_height));
+ else if (parse_flagval(token0, token1, "BREAK", win_flags,
+ BREAK_SET, '8', (char *) &win->linebreak))
{
err_line(2 < win->linebreak, "Value must be 0, 1 or 2.");
}
- else if (parse_val(token0, token1, "WIN_FOCUS", ord_flags,
- FOCUS_SET, 'c', &tmp_active))
+ else if (parse_flagval(token0, token1, "WIN_FOCUS", ord_flags,
+ FOCUS_SET, 'c', &tmp_active))
{
char * err_null = "Value not empty as it should be.";
char * err_outside = "ID not found in WIN_ORDER ID series.";
extern void save_interface_conf()
{
- char * f_name = "save_interface_conf()";
- char * path = world.path_interface;
- size_t size = strlen(path) + 4 + 1;
- char * path_tmp = try_malloc(size, f_name);
- int test = snprintf(path_tmp, size, "%s_tmp", path);
- exit_trouble(test < 0, f_name, "snprintf()");
- FILE * file = try_fopen(path_tmp, "w", f_name);
+ char * path_tmp;
+ FILE * file = atomic_write_start(world.path_interface, &path_tmp);
char * str_keybs = "\nKEYBINDINGS ";
write_def(file, str_keybs, 1, "global", 's');
write_keybindings(file, &world.kb_global);
write_def(file, "HEIGHT ", 0, (char *) &win->target_height, 'i');
write_keybindings(file, &win->kb);
}
- try_fclose_unlink_rename(file, path_tmp, path, f_name);
- free(path_tmp);
+ atomic_write_finish(file, world.path_interface, path_tmp);
}
tmp_order = try_malloc(1, f_name);
tmp_order[0] = '\0';
tmp_active = '\0';
+ detect_atomic_leftover(world.path_interface);
parse_file(world.path_interface, tokens_into_entries);
char * err = "Not all expected windows defined in config file.";
exit_err(strlen(world.winDB.legal_ids) != strlen(world.winDB.ids), err);