Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(735)

Side by Side Diff: src/mm-plugin-base.c

Issue 2118005: Don't probe virtual devices before they exist (Closed) Base URL: git://git.chromium.org/modemmanager.git
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 1 /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* 2 /*
3 * This program is free software; you can redistribute it and/or modify 3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by 4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation; either version 2 of the License, or 5 * the Free Software Foundation; either version 2 of the License, or
6 * (at your option) any later version. 6 * (at your option) any later version.
7 * 7 *
8 * This program is distributed in the hope that it will be useful, 8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details: 11 * GNU General Public License for more details:
12 * 12 *
13 * Copyright (C) 2008 - 2009 Novell, Inc. 13 * Copyright (C) 2008 - 2009 Novell, Inc.
14 * Copyright (C) 2009 Red Hat, Inc. 14 * Copyright (C) 2009 Red Hat, Inc.
15 */ 15 */
16 16
17 #define _GNU_SOURCE /* for strcasestr */ 17 #define _GNU_SOURCE /* for strcasestr */
18 18
19 #include <stdio.h> 19 #include <stdio.h>
20 #include <stdlib.h> 20 #include <stdlib.h>
21
22 #include <sys/stat.h>
21 #include <unistd.h> 23 #include <unistd.h>
22 24
23 #include <string.h> 25 #include <string.h>
24 26
25 #define G_UDEV_API_IS_SUBJECT_TO_CHANGE 27 #define G_UDEV_API_IS_SUBJECT_TO_CHANGE
26 #include <gudev/gudev.h> 28 #include <gudev/gudev.h>
27 29
28 #include "mm-plugin-base.h" 30 #include "mm-plugin-base.h"
29 #include "mm-serial-port.h" 31 #include "mm-serial-port.h"
30 #include "mm-serial-parsers.h" 32 #include "mm-serial-parsers.h"
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 } 893 }
892 894
893 old = iter; 895 old = iter;
894 iter = g_udev_device_get_parent (old); 896 iter = g_udev_device_get_parent (old);
895 g_object_unref (old); 897 g_object_unref (old);
896 } 898 }
897 899
898 return physdev; 900 return physdev;
899 } 901 }
900 902
903 static gboolean
904 device_file_exists(const char *name)
905 {
906 char *devfile;
907 struct stat s;
908 int result;
909
910 devfile = g_strdup_printf ("/dev/%s", name);
911 result = stat (devfile, &s);
912 g_free (devfile);
913
914 return (0 == result) ? TRUE : FALSE;
915 }
916
901 static MMPluginSupportsResult 917 static MMPluginSupportsResult
902 supports_port (MMPlugin *plugin, 918 supports_port (MMPlugin *plugin,
903 const char *subsys, 919 const char *subsys,
904 const char *name, 920 const char *name,
905 MMSupportsPortResultFunc callback, 921 MMSupportsPortResultFunc callback,
906 gpointer callback_data) 922 gpointer callback_data)
907 { 923 {
908 MMPluginBase *self = MM_PLUGIN_BASE (plugin); 924 MMPluginBase *self = MM_PLUGIN_BASE (plugin);
909 MMPluginBasePrivate *priv = MM_PLUGIN_BASE_GET_PRIVATE (self); 925 MMPluginBasePrivate *priv = MM_PLUGIN_BASE_GET_PRIVATE (self);
910 GUdevDevice *port = NULL, *physdev = NULL; 926 GUdevDevice *port = NULL, *physdev = NULL;
(...skipping 12 matching lines...) Expand all
923 } 939 }
924 940
925 port = g_udev_client_query_by_subsystem_and_name (priv->client, subsys, name ); 941 port = g_udev_client_query_by_subsystem_and_name (priv->client, subsys, name );
926 if (!port) 942 if (!port)
927 goto out; 943 goto out;
928 944
929 // Detect any modems accessible through the list of virtual ports 945 // Detect any modems accessible through the list of virtual ports
930 for (idx = 0; virtual_port[idx]; idx++) { 946 for (idx = 0; virtual_port[idx]; idx++) {
931 if (strcmp(name, virtual_port[idx])) 947 if (strcmp(name, virtual_port[idx]))
932 continue; 948 continue;
949
950 if (!device_file_exists(virtual_port[idx]))
951 continue;
952
933 task = supports_task_new (self, port, port, "virtual", callback, callbac k_data); 953 task = supports_task_new (self, port, port, "virtual", callback, callbac k_data);
934 g_assert (task); 954 g_assert (task);
935 g_hash_table_insert (priv->tasks, g_strdup (key), g_object_ref (task)); 955 g_hash_table_insert (priv->tasks, g_strdup (key), g_object_ref (task));
936 master_path = g_udev_device_get_sysfs_path (port); 956 master_path = g_udev_device_get_sysfs_path (port);
937 goto find_plugin; 957 goto find_plugin;
938 } 958 }
939 959
940 physdev = MM_PLUGIN_BASE_GET_CLASS (self)->find_physical_device (self, port) ; 960 physdev = MM_PLUGIN_BASE_GET_CLASS (self)->find_physical_device (self, port) ;
941 if (!physdev) 961 if (!physdev)
942 goto out; 962 goto out;
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 1153
1134 signals[PROBE_RESULT] = 1154 signals[PROBE_RESULT] =
1135 g_signal_new ("probe-result", 1155 g_signal_new ("probe-result",
1136 G_OBJECT_CLASS_TYPE (object_class), 1156 G_OBJECT_CLASS_TYPE (object_class),
1137 G_SIGNAL_RUN_FIRST, 1157 G_SIGNAL_RUN_FIRST,
1138 G_STRUCT_OFFSET (MMPluginBaseClass, probe_result), 1158 G_STRUCT_OFFSET (MMPluginBaseClass, probe_result),
1139 NULL, NULL, 1159 NULL, NULL,
1140 mm_marshal_VOID__OBJECT_UINT, 1160 mm_marshal_VOID__OBJECT_UINT,
1141 G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_UINT); 1161 G_TYPE_NONE, 2, G_TYPE_OBJECT, G_TYPE_UINT);
1142 } 1162 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698