i3/libi3
Theo Buehler ea6af13127 mkdirp: do not throw an error if directory exists
If I restart i3 4.10.2 twice, e.g. with

$ i3-msg restart; sleep 3; i3-msg restart

the second time I get the following two errors:

05/22/15 10:46:03 - ERROR: mkdir(/tmp/i3-theo.toAK7N) failed: File exists
05/22/15 10:46:03 - ERROR: Could not create "/tmp/i3-theo.toAK7N" for storing the restart layout, layout will be lost.

The first one is from mkdirp() in src/ipc.c and the second one is from
store_restart_layout() in src/util.c.

Notice that I do _not_ get the ``open()'' or ``Could not write restart layout to
...'' error messages, so the layout writing code after line 260 in
store_restart_layout() succeeded and the layout isn't actually lost.  Thus,
these error messages are a bit misleading, especially the second one (which is
triggered by the failure of mkdirp()).

POSIX says about `mkdir -p':

``Each dir operand that names an existing directory shall be ignored without
error.''

Therefore, I suggest the following simple patch that makes mkdirp() succeed if
the named file exists and actually is a directory.  This silences the second
error as well.
2015-05-23 13:12:18 +02:00
..
dpi.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
fake_configure_notify.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
font.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
get_colorpixel.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
get_config_path.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
get_exe_path.c format **/*.c with clang-format-3.5 2014-06-15 19:07:02 +02:00
get_mod_mask.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
get_process_filename.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
get_visualtype.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
ipc_connect.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
ipc_recv_message.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
ipc_send_message.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
is_debug_build.c Move is_debug_build() to libi3/ 2012-05-09 19:12:20 +02:00
libi3.mk Repect AR environment variable 2012-12-17 10:24:42 +01:00
Makefile Add stub Makefiles to allow subdir make calls 2012-07-22 19:57:48 +02:00
mkdirp.c mkdirp: do not throw an error if directory exists 2015-05-23 13:12:18 +02:00
README Introduce libi3, an *internal* library to eliminate code duplication 2011-10-02 16:11:30 +01:00
resolve_tilde.c Introduce sstrndup wrapper. 2015-05-06 16:33:15 +02:00
root_atom_contents.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
safewrappers.c Introduce sstrndup wrapper. 2015-05-06 16:33:15 +02:00
string.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
strndup.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00
ucs2_conversion.c Update copyright notices and get rid of ranges 2015-04-20 17:50:21 -04:00

Introduction
============

libi3 is an *INTERNAL* library which contains functions that i3 and related
tools (i3-msg, i3-input, i3-nagbar, i3-config-wizard, i3bar) use.

It is NOT to be used by other programs.

Structure
=========

Every function gets its own .c file, which in turn gets compiled into an .o
object file. Afterwards, all .o files are archived into one static library
(libi3.a). This library will be linked into all i3 binaries. The linker is able
to eliminate unused .o files when linking, so only the functions which you
actually use will be included in the corresponding binary.