Implemented logging into separate file for debugging
[mtetherd] / util.c
1 /*
2   mtetherd
3   (c) 2010 Gregor Riepl <onitake@gmail.com>
4   
5   Tethering utility for Maemo
6   
7   This program is free software: you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation, either version 3 of the License, or
10   (at your option) any later version.
11   
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16   
17   You should have received a copy of the GNU General Public License
18   along with this program.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #include <stdlib.h>
22 #include <stdio.h>
23 #include <unistd.h>
24 #include <glib.h>
25 #include "util.h"
26 #include "plugin.h"
27
28 static const char *MODULE_LIST = "/proc/modules";
29
30 gboolean mtetherd_scan_modules(const char *module) {
31         g_log(MTETHERD_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, "Scanning %s", MODULE_LIST);
32
33         FILE *fp = fopen(MODULE_LIST, "r");
34         if (!fp) {
35                 return FALSE;
36         }
37         gboolean found = FALSE;
38         char *line = NULL;
39         while (!found && getline(&line, NULL, fp) != -1) {
40                 g_log(MTETHERD_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, "Checking if '%s' starts with %s...", line, module);
41                 if (g_str_has_prefix(line, module) == 0) {
42                         g_log(MTETHERD_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE, "Found %s", module);
43                         found = TRUE;
44                 }
45                 free(line);
46                 line = NULL;
47         }
48         fclose(fp);
49         return found;
50 }
51
52 gboolean mtetherd_launch_script(const char *command[]) {
53         pid_t pid = fork();
54         if (pid == 0) {
55                 if (execv(command[0], (char **const) command) == -1) {
56                         exit(1);
57                 }
58         } else if (pid == -1) {
59                 // error forking
60                 return FALSE;
61         }
62         // launch ok
63         return TRUE;
64 }
65