<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/NetworkManager.git/src/settings/nm-settings-plugin.h, branch th/cli-strsplit</title>
<subtitle>gitlab.freedesktop.org: NetworkManager/NetworkManager.git
</subtitle>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/NetworkManager.git/'/>
<entry>
<title>include: use double-quotes to include our own headers</title>
<updated>2017-03-09T13:12:35+00:00</updated>
<author>
<name>Thomas Haller</name>
<email>thaller@redhat.com</email>
</author>
<published>2017-03-09T12:02:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/NetworkManager.git/commit/?id=831286df3001e6b76b7baeb10a7723841ab8b35e'/>
<id>831286df3001e6b76b7baeb10a7723841ab8b35e</id>
<content type='text'>
In practice, this should only matter when there are multiple
header files with the same name. That is something we try
to avoid already, by giving headers a distinct name.

When building NetworkManager itself, we clearly want to use
double-quotes for including our own headers.
But we also want to do that in our public headers. For example:

  ./a.c
    #include &lt;stdio.h&gt;
    #include &lt;nm-1.h&gt;
    void main() {
        printf ("INCLUDED %s/nm-2.h\n", SYMB);
    }

  ./1/nm-1.h
    #include &lt;nm-2.h&gt;

  ./1/nm-2.h
    #define SYMB "1"

  ./2/nm-2.h
    #define SYMB "2"

$ cc -I./2 -I./1 ./a.c
$ ./a.out
INCLUDED 2/nm-2.h

Exceptions to this are
  - headers in "shared/nm-utils" that include &lt;NetworkManager.h&gt;. These
    headers are copied into projects and hence used like headers owned by
    those projects.
  - examples/C
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In practice, this should only matter when there are multiple
header files with the same name. That is something we try
to avoid already, by giving headers a distinct name.

When building NetworkManager itself, we clearly want to use
double-quotes for including our own headers.
But we also want to do that in our public headers. For example:

  ./a.c
    #include &lt;stdio.h&gt;
    #include &lt;nm-1.h&gt;
    void main() {
        printf ("INCLUDED %s/nm-2.h\n", SYMB);
    }

  ./1/nm-1.h
    #include &lt;nm-2.h&gt;

  ./1/nm-2.h
    #define SYMB "1"

  ./2/nm-2.h
    #define SYMB "2"

$ cc -I./2 -I./1 ./a.c
$ ./a.out
INCLUDED 2/nm-2.h

Exceptions to this are
  - headers in "shared/nm-utils" that include &lt;NetworkManager.h&gt;. These
    headers are copied into projects and hence used like headers owned by
    those projects.
  - examples/C
</pre>
</div>
</content>
</entry>
<entry>
<title>all: cleanup includes in header files</title>
<updated>2016-08-17T17:51:17+00:00</updated>
<author>
<name>Thomas Haller</name>
<email>thaller@redhat.com</email>
</author>
<published>2016-08-17T16:19:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/NetworkManager.git/commit/?id=0bdcab100ca5fd86ec8ab0f9ccc3645b47835437'/>
<id>0bdcab100ca5fd86ec8ab0f9ccc3645b47835437</id>
<content type='text'>
- don't include "nm-default.h" in header files. Every source file must
  include as first header "nm-default.h", thus our headers get the
  default include already implicitly.

- we don't support compiling NetworkManager itself with a C++ compiler. Remove
  G_BEGIN_DECLS/G_END_DECLS from internal headers. We do however support
  users of libnm to use C++, thus they stay in public headers.

(cherry picked from commit f19aff89095ca192b8b2e37534b7a899aecd82f9)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- don't include "nm-default.h" in header files. Every source file must
  include as first header "nm-default.h", thus our headers get the
  default include already implicitly.

- we don't support compiling NetworkManager itself with a C++ compiler. Remove
  G_BEGIN_DECLS/G_END_DECLS from internal headers. We do however support
  users of libnm to use C++, thus they stay in public headers.

(cherry picked from commit f19aff89095ca192b8b2e37534b7a899aecd82f9)
</pre>
</div>
</content>
</entry>
<entry>
<title>core: fix interface type names</title>
<updated>2015-09-10T17:43:47+00:00</updated>
<author>
<name>Dan Winship</name>
<email>danw@redhat.com</email>
</author>
<published>2015-04-16T13:05:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/NetworkManager.git/commit/?id=8e9f7820829bf7f586b73d2954a8727f87df2e74'/>
<id>8e9f7820829bf7f586b73d2954a8727f87df2e74</id>
<content type='text'>
A GObject interface, like a class, has two different C types
associated with it; the type of the "class" struct (eg, GObjectClass,
GFileIface), and the type of instances of that class/interface (eg,
GObject, GFile).

NetworkManager was doing this wrong though, and using the same C type
to point to both the interface's class struct and to instances of the
interface. This ends up not actually breaking anything, since for
interface types, the instance type is a non-dereferenceable dummy type
anyway. But it's wrong, since if, eg, NMDeviceFactory is a struct type
containing members "start", "device_added", etc, then you should not
be using an NMDeviceFactory* to point to an object that does not
contain those members.

Fix this by splitting NMDeviceFactory into NMDeviceFactoryInterface
and NMDeviceFactory; by splitting NMConnectionProvider into
NMConnectionProviderInterface and NMConnectionProvider; and by
splitting NMSettingsPlugin into NMSettingsPluginInterface and
NMSettingsPlugin; and then use the right types in the right places.

As a bonus, this also lets us now use G_DEFINE_INTERFACE.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A GObject interface, like a class, has two different C types
associated with it; the type of the "class" struct (eg, GObjectClass,
GFileIface), and the type of instances of that class/interface (eg,
GObject, GFile).

NetworkManager was doing this wrong though, and using the same C type
to point to both the interface's class struct and to instances of the
interface. This ends up not actually breaking anything, since for
interface types, the instance type is a non-dereferenceable dummy type
anyway. But it's wrong, since if, eg, NMDeviceFactory is a struct type
containing members "start", "device_added", etc, then you should not
be using an NMDeviceFactory* to point to an object that does not
contain those members.

Fix this by splitting NMDeviceFactory into NMDeviceFactoryInterface
and NMDeviceFactory; by splitting NMConnectionProvider into
NMConnectionProviderInterface and NMConnectionProvider; and by
splitting NMSettingsPlugin into NMSettingsPluginInterface and
NMSettingsPlugin; and then use the right types in the right places.

As a bonus, this also lets us now use G_DEFINE_INTERFACE.
</pre>
</div>
</content>
</entry>
<entry>
<title>settings: remove some NMSettingsPlugin cruft</title>
<updated>2015-09-10T17:43:47+00:00</updated>
<author>
<name>Dan Winship</name>
<email>danw@redhat.com</email>
</author>
<published>2015-04-16T13:42:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/NetworkManager.git/commit/?id=b3d56e4885fc3395337e46acbaf8b6f8bcd2985e'/>
<id>b3d56e4885fc3395337e46acbaf8b6f8bcd2985e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>settings: trivial: rename NMSystemConfigInterface to NMSettingsPlugin</title>
<updated>2015-09-10T17:43:47+00:00</updated>
<author>
<name>Dan Winship</name>
<email>danw@redhat.com</email>
</author>
<published>2015-04-16T12:52:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/NetworkManager.git/commit/?id=dfb77e3b198f36b98c2f6815f9f8b6f87ef905f9'/>
<id>dfb77e3b198f36b98c2f6815f9f8b6f87ef905f9</id>
<content type='text'>
Since there have not been separate system and user settings services
since 0.8, the "system" in NMSystemConfigInterface is kind of
meaningless. Rename it to NMSettingsPlugin, which describes what it
does better.

This is just:

    git mv src/settings/nm-system-config-interface.h src/settings/nm-settings-plugin.h
    git mv src/settings/nm-system-config-interface.c src/settings/nm-settings-plugin.c
    perl -pi -e 's/SystemConfigInterface/SettingsPlugin/g;' \
             -e 's/system_config_interface/settings_plugin/g;' \
             -e 's/system-config-interface/settings-plugin/g;' \
             -e 's/SYSTEM_CONFIG_INTERFACE/SETTINGS_PLUGIN/g;' \
             -e 's/sc_plugin/settings_plugin/g;' \
             -e 's/SC_PLUGIN/SETTINGS_PLUGIN/g;' \
             -e 's/SC_IS_PLUGIN/SETTINGS_IS_PLUGIN/g;' \
             -e 's/SC_TYPE_PLUGIN/SETTINGS_TYPE_PLUGIN/g;' \
             -e 's/SCPlugin/SettingsPlugin/g;' \
             -e 's/nm_system_config_factory/nm_settings_plugin_factory/g;' \
         $(find src/settings -type f)

(followed by some whitespace fixups in nm-settings-plugin.c, and a
Makefile.am fix for the rename)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since there have not been separate system and user settings services
since 0.8, the "system" in NMSystemConfigInterface is kind of
meaningless. Rename it to NMSettingsPlugin, which describes what it
does better.

This is just:

    git mv src/settings/nm-system-config-interface.h src/settings/nm-settings-plugin.h
    git mv src/settings/nm-system-config-interface.c src/settings/nm-settings-plugin.c
    perl -pi -e 's/SystemConfigInterface/SettingsPlugin/g;' \
             -e 's/system_config_interface/settings_plugin/g;' \
             -e 's/system-config-interface/settings-plugin/g;' \
             -e 's/SYSTEM_CONFIG_INTERFACE/SETTINGS_PLUGIN/g;' \
             -e 's/sc_plugin/settings_plugin/g;' \
             -e 's/SC_PLUGIN/SETTINGS_PLUGIN/g;' \
             -e 's/SC_IS_PLUGIN/SETTINGS_IS_PLUGIN/g;' \
             -e 's/SC_TYPE_PLUGIN/SETTINGS_TYPE_PLUGIN/g;' \
             -e 's/SCPlugin/SettingsPlugin/g;' \
             -e 's/nm_system_config_factory/nm_settings_plugin_factory/g;' \
         $(find src/settings -type f)

(followed by some whitespace fixups in nm-settings-plugin.c, and a
Makefile.am fix for the rename)
</pre>
</div>
</content>
</entry>
</feed>
