~gandelman-a/ubuntu/oneiric/udev/lp818177

« back to all changes in this revision

Viewing changes to libudev/libudev-device.c

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2011-05-20 11:26:10 UTC
  • mfrom: (0.7.11 upstream)
  • Revision ID: james.westby@ubuntu.com-20110520112610-4mw870d2yzsnfjfg
Tags: 170-0ubuntu1
* New upstream release.
* debian/udev-udeb.install, debian/udev.initramfs-hook: Drop floppy and edd
  rules, there are obsolete and not built by default any more.
* debian/udev.{postinst,postrm,prerm}: Remove a lot of obsolete transition
  handling.
* debian/udev.postinst: Drop create_devices(). devtmpfs does all that by
  itself these days. Update remove_devices() to clean up.

Show diffs side-by-side

added added

removed removed

Lines of Context:
51
51
        char *sysname;
52
52
        const char *sysnum;
53
53
        char *devnode;
 
54
        mode_t devnode_mode;
54
55
        char *subsystem;
55
56
        char *devtype;
56
57
        char *driver;
103
104
                        udev_list_entry_delete(list_entry);
104
105
                return NULL;
105
106
        }
106
 
        return udev_list_entry_add(udev_device->udev, &udev_device->properties_list, key, value, 1, 0);
 
107
        return udev_list_entry_add(udev_device->udev, &udev_device->properties_list, key, value, UDEV_LIST_UNIQUE);
107
108
}
108
109
 
109
110
static struct udev_list_entry *udev_device_add_property_from_string(struct udev_device *udev_device, const char *property)
199
200
                udev_device_set_timeout(udev_device, strtoull(&property[8], NULL, 10));
200
201
        } else if (strncmp(property, "IFINDEX=", 8) == 0) {
201
202
                udev_device_set_ifindex(udev_device, strtoull(&property[8], NULL, 10));
 
203
        } else if (strncmp(property, "DEVMODE=", 8) == 0) {
 
204
                udev_device_set_devnode_mode(udev_device, strtoul(&property[8], NULL, 8));
202
205
        } else {
203
206
                udev_device_add_property_from_string(udev_device, property);
204
207
        }
289
292
                        break;
290
293
                case 'E':
291
294
                        entry = udev_device_add_property_from_string(udev_device, val);
292
 
                        udev_list_entry_set_flags(entry, 1);
 
295
                        udev_list_entry_set_num(entry, true);
293
296
                        break;
294
297
                case 'G':
295
298
                        udev_device_add_tag(udev_device, val);
343
346
                        udev_device_set_ifindex(udev_device, strtoull(&line[8], NULL, 10));
344
347
                else if (strncmp(line, "DEVNAME=", 8) == 0)
345
348
                        udev_device_set_knodename(udev_device, &line[8]);
 
349
                else if (strncmp(line, "DEVMODE=", 8) == 0)
 
350
                        udev_device->devnode_mode = strtoul(&line[8], NULL, 8);
346
351
 
347
352
                udev_device_add_property_from_string(udev_device, line);
348
353
        }
930
935
        return udev_device->devnode;
931
936
}
932
937
 
 
938
mode_t udev_device_get_devnode_mode(struct udev_device *udev_device)
 
939
{
 
940
        if (!udev_device->info_loaded)
 
941
                udev_device_read_uevent_file(udev_device);
 
942
        return udev_device->devnode_mode;
 
943
}
 
944
 
933
945
/**
934
946
 * udev_device_get_subsystem:
935
947
 * @udev_device: udev device
1216
1228
        util_strscpyl(path, sizeof(path), udev_device_get_syspath(udev_device), "/", sysattr, NULL);
1217
1229
        if (lstat(path, &statbuf) != 0) {
1218
1230
                dbg(udev_device->udev, "no attribute '%s', keep negative entry\n", path);
1219
 
                udev_list_entry_add(udev_device->udev, &udev_device->sysattr_value_list, sysattr, NULL, 0, 0);
 
1231
                udev_list_entry_add(udev_device->udev, &udev_device->sysattr_value_list, sysattr, NULL, 0);
1220
1232
                goto out;
1221
1233
        }
1222
1234
 
1240
1252
                if (pos != NULL) {
1241
1253
                        pos = &pos[1];
1242
1254
                        dbg(udev_device->udev, "cache '%s' with link value '%s'\n", sysattr, pos);
1243
 
                        list_entry = udev_list_entry_add(udev_device->udev, &udev_device->sysattr_value_list, sysattr, pos, 0, 0);
 
1255
                        list_entry = udev_list_entry_add(udev_device->udev, &udev_device->sysattr_value_list, sysattr, pos, 0);
1244
1256
                        val = udev_list_entry_get_value(list_entry);
1245
1257
                }
1246
1258
 
1272
1284
        value[size] = '\0';
1273
1285
        util_remove_trailing_chars(value, '\n');
1274
1286
        dbg(udev_device->udev, "'%s' has attribute value '%s'\n", path, value);
1275
 
        list_entry = udev_list_entry_add(udev_device->udev, &udev_device->sysattr_value_list, sysattr, value, 0, 0);
 
1287
        list_entry = udev_list_entry_add(udev_device->udev, &udev_device->sysattr_value_list, sysattr, value, 0);
1276
1288
        val = udev_list_entry_get_value(list_entry);
1277
1289
out:
1278
1290
        return val;
1311
1323
                        continue;
1312
1324
 
1313
1325
                udev_list_entry_add(udev_device->udev, &udev_device->sysattr_list,
1314
 
                                    dent->d_name, NULL, 0, 0);
 
1326
                                    dent->d_name, NULL, 0);
1315
1327
                num++;
1316
1328
        }
1317
1329
 
1414
1426
        return 0;
1415
1427
}
1416
1428
 
 
1429
int udev_device_set_devnode_mode(struct udev_device *udev_device, mode_t mode)
 
1430
{
 
1431
        char num[32];
 
1432
 
 
1433
        udev_device->devnode_mode = mode;
 
1434
        snprintf(num, sizeof(num), "%#o", mode);
 
1435
        udev_device_add_property(udev_device, "DEVMODE", num);
 
1436
        return 0;
 
1437
}
 
1438
 
1417
1439
int udev_device_add_devlink(struct udev_device *udev_device, const char *devlink, int unique)
1418
1440
{
1419
1441
        struct udev_list_entry *list_entry;
1420
1442
 
1421
1443
        udev_device->devlinks_uptodate = false;
1422
 
        list_entry = udev_list_entry_add(udev_device->udev, &udev_device->devlinks_list, devlink, NULL, 1, 0);
 
1444
        list_entry = udev_list_entry_add(udev_device->udev, &udev_device->devlinks_list, devlink, NULL, UDEV_LIST_UNIQUE);
1423
1445
        if (list_entry == NULL)
1424
1446
                return -ENOMEM;
1425
1447
        if (unique)
1426
 
                udev_list_entry_set_flags(list_entry, 1);
 
1448
                udev_list_entry_set_num(list_entry, true);
1427
1449
        return 0;
1428
1450
}
1429
1451
 
1491
1513
        if (strchr(tag, ':') != NULL || strchr(tag, ' ') != NULL)
1492
1514
                return -EINVAL;
1493
1515
        udev_device->tags_uptodate = false;
1494
 
        if (udev_list_entry_add(udev_device->udev, &udev_device->tags_list, tag, NULL, 1, 0) != NULL)
 
1516
        if (udev_list_entry_add(udev_device->udev, &udev_device->tags_list, tag, NULL, UDEV_LIST_UNIQUE) != NULL)
1495
1517
                return 0;
1496
1518
        return -ENOMEM;
1497
1519
}