GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: usr.bin/tmux/cmd-source-file.c Lines: 0 30 0.0 %
Date: 2016-12-06 Branches: 0 13 0.0 %

Line Branch Exec Source
1
/* $OpenBSD: cmd-source-file.c,v 1.25 2016/05/12 16:05:33 tim Exp $ */
2
3
/*
4
 * Copyright (c) 2008 Tiago Cunha <me@tiagocunha.org>
5
 *
6
 * Permission to use, copy, modify, and distribute this software for any
7
 * purpose with or without fee is hereby granted, provided that the above
8
 * copyright notice and this permission notice appear in all copies.
9
 *
10
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
 * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
15
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
16
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
 */
18
19
#include <sys/types.h>
20
21
#include <stdlib.h>
22
23
#include "tmux.h"
24
25
/*
26
 * Sources a configuration file.
27
 */
28
29
enum cmd_retval	cmd_source_file_exec(struct cmd *, struct cmd_q *);
30
31
void		cmd_source_file_done(struct cmd_q *);
32
33
const struct cmd_entry cmd_source_file_entry = {
34
	.name = "source-file",
35
	.alias = "source",
36
37
	.args = { "q", 1, 1 },
38
	.usage = "[-q] path",
39
40
	.flags = 0,
41
	.exec = cmd_source_file_exec
42
};
43
44
enum cmd_retval
45
cmd_source_file_exec(struct cmd *self, struct cmd_q *cmdq)
46
{
47
	struct args	*args = self->args;
48
	struct cmd_q	*cmdq1;
49
	int		 quiet;
50
51
	cmdq1 = cmdq_new(cmdq->client);
52
	cmdq1->flags |= cmdq->flags & CMD_Q_NOHOOKS;
53
	cmdq1->emptyfn = cmd_source_file_done;
54
	cmdq1->data = cmdq;
55
56
	quiet = args_has(args, 'q');
57
	switch (load_cfg(args->argv[0], cmdq1, quiet)) {
58
	case -1:
59
		cmdq_free(cmdq1);
60
		if (cfg_references == 0) {
61
			cfg_print_causes(cmdq);
62
			return (CMD_RETURN_ERROR);
63
		}
64
		return (CMD_RETURN_NORMAL);
65
	case 0:
66
		cmdq_free(cmdq1);
67
		if (cfg_references == 0)
68
			cfg_print_causes(cmdq);
69
		return (CMD_RETURN_NORMAL);
70
	}
71
72
	cmdq->references++;
73
	cfg_references++;
74
75
	cmdq_continue(cmdq1);
76
	return (CMD_RETURN_WAIT);
77
}
78
79
void
80
cmd_source_file_done(struct cmd_q *cmdq1)
81
{
82
	struct cmd_q	*cmdq = cmdq1->data;
83
84
	if (cmdq1->client_exit >= 0)
85
		cmdq->client_exit = cmdq1->client_exit;
86
87
	cmdq_free(cmdq1);
88
89
	cfg_references--;
90
91
	if (cmdq_free(cmdq))
92
		return;
93
94
	if (cfg_references == 0)
95
		cfg_print_causes(cmdq);
96
	cmdq_continue(cmdq);
97
}