1 | /* |
2 | * Copyright 2015 Red Hat, Inc. |
3 | * |
4 | * This library is free software; you can redistribute it and/or |
5 | * modify it under the terms of the GNU Lesser General Public |
6 | * License as published by the Free Software Foundation; either |
7 | * version 2.1 of the License, or (at your option) any later version. |
8 | * |
9 | * This library is distributed in the hope that it will be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
12 | * Lesser General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU Lesser General Public |
15 | * License along with this library; if not, see <http://www.gnu.org/licenses/>. |
16 | * |
17 | * Author: Matthias Clasen <mclasen@redhat.com> |
18 | */ |
19 | |
20 | #include "config.h" |
21 | |
22 | #include <gio/gio.h> |
23 | #include <gi18n.h> |
24 | |
25 | #include "gio-tool.h" |
26 | |
27 | |
28 | static gboolean parent = FALSE; |
29 | |
30 | static const GOptionEntry entries[] = { |
31 | { "parent" , 'p', 0, G_OPTION_ARG_NONE, &parent, N_("Create parent directories" ), NULL }, |
32 | { NULL } |
33 | }; |
34 | |
35 | int |
36 | handle_mkdir (int argc, char *argv[], gboolean do_help) |
37 | { |
38 | GOptionContext *context; |
39 | gchar *param; |
40 | GError *error = NULL; |
41 | GFile *file; |
42 | int retval = 0; |
43 | int i; |
44 | |
45 | g_set_prgname (prgname: "gio mkdir" ); |
46 | |
47 | /* Translators: commandline placeholder */ |
48 | param = g_strdup_printf (format: "%s…" , _("LOCATION" )); |
49 | context = g_option_context_new (parameter_string: param); |
50 | g_free (mem: param); |
51 | g_option_context_set_help_enabled (context, FALSE); |
52 | g_option_context_set_summary (context, _("Create directories." )); |
53 | g_option_context_set_description (context, |
54 | _("gio mkdir is similar to the traditional mkdir utility, but using GIO\n" |
55 | "locations instead of local files: for example, you can use something\n" |
56 | "like smb://server/resource/mydir as location." )); |
57 | g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); |
58 | |
59 | if (do_help) |
60 | { |
61 | show_help (context, NULL); |
62 | g_option_context_free (context); |
63 | return 0; |
64 | } |
65 | |
66 | if (!g_option_context_parse (context, argc: &argc, argv: &argv, error: &error)) |
67 | { |
68 | show_help (context, message: error->message); |
69 | g_error_free (error); |
70 | g_option_context_free (context); |
71 | return 1; |
72 | } |
73 | |
74 | if (argc < 2) |
75 | { |
76 | show_help (context, _("No locations given" )); |
77 | g_option_context_free (context); |
78 | return 1; |
79 | } |
80 | |
81 | g_option_context_free (context); |
82 | |
83 | for (i = 1; i < argc; i++) |
84 | { |
85 | file = g_file_new_for_commandline_arg (arg: argv[i]); |
86 | error = NULL; |
87 | if (parent) |
88 | { |
89 | if (!g_file_make_directory_with_parents (file, NULL, error: &error)) |
90 | { |
91 | print_file_error (file, message: error->message); |
92 | g_error_free (error); |
93 | retval = 1; |
94 | } |
95 | } |
96 | else |
97 | { |
98 | if (!g_file_make_directory (file, NULL, error: &error)) |
99 | { |
100 | print_file_error (file, message: error->message); |
101 | g_error_free (error); |
102 | retval = 1; |
103 | } |
104 | g_object_unref (object: file); |
105 | } |
106 | } |
107 | |
108 | return retval; |
109 | |
110 | } |
111 | |