xref: /aosp_15_r20/external/libbrillo/brillo/udev/udev_enumerate.h (revision 1a96fba65179ea7d3f56207137718607415c5953)
1*1a96fba6SXin Li // Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
2*1a96fba6SXin Li // Use of this source code is governed by a BSD-style license that can be
3*1a96fba6SXin Li // found in the LICENSE file.
4*1a96fba6SXin Li 
5*1a96fba6SXin Li #ifndef LIBBRILLO_BRILLO_UDEV_UDEV_ENUMERATE_H_
6*1a96fba6SXin Li #define LIBBRILLO_BRILLO_UDEV_UDEV_ENUMERATE_H_
7*1a96fba6SXin Li 
8*1a96fba6SXin Li #include <memory>
9*1a96fba6SXin Li 
10*1a96fba6SXin Li #include <base/macros.h>
11*1a96fba6SXin Li #include <brillo/brillo_export.h>
12*1a96fba6SXin Li #include <brillo/udev/udev_list_entry.h>
13*1a96fba6SXin Li 
14*1a96fba6SXin Li struct udev_enumerate;
15*1a96fba6SXin Li 
16*1a96fba6SXin Li namespace brillo {
17*1a96fba6SXin Li 
18*1a96fba6SXin Li // A udev enumerate class, which wraps a udev_enumerate C struct from libudev
19*1a96fba6SXin Li // and related library functions into a C++ object.
20*1a96fba6SXin Li class BRILLO_EXPORT UdevEnumerate {
21*1a96fba6SXin Li  public:
22*1a96fba6SXin Li   // Constructs a UdevEnumerate object by taking a raw pointer to a
23*1a96fba6SXin Li   // udev_enumerate struct as |enumerate|. The ownership of |enumerate| is not
24*1a96fba6SXin Li   // transferred, but its reference count is increased by one during the
25*1a96fba6SXin Li   // lifetime of this object.
26*1a96fba6SXin Li   explicit UdevEnumerate(udev_enumerate* enumerate);
27*1a96fba6SXin Li 
28*1a96fba6SXin Li   // Destructs this UdevEnumerate object and decreases the reference count of
29*1a96fba6SXin Li   // the underlying udev_enumerate struct by one.
30*1a96fba6SXin Li   virtual ~UdevEnumerate();
31*1a96fba6SXin Li 
32*1a96fba6SXin Li   // Wraps udev_enumerate_add_match_subsystem(). Returns true on success.
33*1a96fba6SXin Li   virtual bool AddMatchSubsystem(const char* subsystem);
34*1a96fba6SXin Li 
35*1a96fba6SXin Li   // Wraps udev_enumerate_add_nomatch_subsystem(). Returns true on success.
36*1a96fba6SXin Li   virtual bool AddNoMatchSubsystem(const char* subsystem);
37*1a96fba6SXin Li 
38*1a96fba6SXin Li   // Wraps udev_enumerate_add_match_sysattr(). Returns true on success.
39*1a96fba6SXin Li   virtual bool AddMatchSysAttribute(const char* attribute, const char* value);
40*1a96fba6SXin Li 
41*1a96fba6SXin Li   // Wraps udev_enumerate_add_nomatch_sysattr(). Returns true on success.
42*1a96fba6SXin Li   virtual bool AddNoMatchSysAttribute(const char* attribute, const char* value);
43*1a96fba6SXin Li 
44*1a96fba6SXin Li   // Wraps udev_enumerate_add_match_property(). Returns true on success.
45*1a96fba6SXin Li   virtual bool AddMatchProperty(const char* property, const char* value);
46*1a96fba6SXin Li 
47*1a96fba6SXin Li   // Wraps udev_enumerate_add_match_sysname(). Returns true on success.
48*1a96fba6SXin Li   virtual bool AddMatchSysName(const char* sys_name);
49*1a96fba6SXin Li 
50*1a96fba6SXin Li   // Wraps udev_enumerate_add_match_tag(). Returns true on success.
51*1a96fba6SXin Li   virtual bool AddMatchTag(const char* tag);
52*1a96fba6SXin Li 
53*1a96fba6SXin Li   // Wraps udev_enumerate_add_match_is_initialized(). Returns true on success.
54*1a96fba6SXin Li   virtual bool AddMatchIsInitialized();
55*1a96fba6SXin Li 
56*1a96fba6SXin Li   // Wraps udev_enumerate_add_syspath(). Returns true on success.
57*1a96fba6SXin Li   virtual bool AddSysPath(const char* sys_path);
58*1a96fba6SXin Li 
59*1a96fba6SXin Li   // Wraps udev_enumerate_scan_devices(). Returns true on success.
60*1a96fba6SXin Li   virtual bool ScanDevices();
61*1a96fba6SXin Li 
62*1a96fba6SXin Li   // Wraps udev_enumerate_scan_subsystems(). Returns true on success.
63*1a96fba6SXin Li   virtual bool ScanSubsystems();
64*1a96fba6SXin Li 
65*1a96fba6SXin Li   // Wraps udev_enumerate_get_list_entry().
66*1a96fba6SXin Li   virtual std::unique_ptr<UdevListEntry> GetListEntry() const;
67*1a96fba6SXin Li 
68*1a96fba6SXin Li  private:
69*1a96fba6SXin Li   // Allows MockUdevEnumerate to invoke the private default constructor below.
70*1a96fba6SXin Li   friend class MockUdevEnumerate;
71*1a96fba6SXin Li 
72*1a96fba6SXin Li   // Constructs a UdevEnumerate object without referencing a udev_enumerate
73*1a96fba6SXin Li   // struct, which is only allowed to be called by MockUdevEnumerate.
74*1a96fba6SXin Li   UdevEnumerate();
75*1a96fba6SXin Li 
76*1a96fba6SXin Li   udev_enumerate* enumerate_;
77*1a96fba6SXin Li 
78*1a96fba6SXin Li   DISALLOW_COPY_AND_ASSIGN(UdevEnumerate);
79*1a96fba6SXin Li };
80*1a96fba6SXin Li 
81*1a96fba6SXin Li }  // namespace brillo
82*1a96fba6SXin Li 
83*1a96fba6SXin Li #endif  // LIBBRILLO_BRILLO_UDEV_UDEV_ENUMERATE_H_
84