[netcf-devel] [PATCH 1/2] Making changes based on suggestions from Eric Blake

Adam Stokes astokes at fedoraproject.org
Fri Sep 17 14:45:28 UTC 2010


https://fedorahosted.org/pipermail/netcf-devel/2010-September/000449.html
---
 autogen.sh            |    2 +-
 bootstrap             |   29 ++++++++--------
 configure.ac          |    9 +----
 mingw32-netcf.spec.in |   14 +++----
 src/Makefile.am       |    6 +--
 src/netcf.c           |   39 ++++++++++++++++++++++
 src/netcf_win.c       |   86 ++++++++++---------------------------------------
 src/netcf_win.h       |   25 +-------------
 8 files changed, 83 insertions(+), 127 deletions(-)

diff --git a/autogen.sh b/autogen.sh
index 156c5fa..b0197c3 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -85,7 +85,7 @@ fi
 mkdir -p $BUILD_AUX
 
 $LIBTOOLIZE --copy --force
-./bootstrap $GNULIB_SRCDIR
+./bootstrap ${GNULIB_SRCDIR:+--gnulib-srcdir="$GNULIB_SRCDIR"}
 aclocal -I gnulib/m4
 autoheader
 automake --add-missing
diff --git a/bootstrap b/bootstrap
index 57ed2df..84d81cb 100755
--- a/bootstrap
+++ b/bootstrap
@@ -58,28 +58,28 @@ gnulib_tool=$GNULIB_SRCDIR/gnulib-tool
 <$gnulib_tool || exit
 
 modules='
+arpa_inet
 c-ctype
+close
+fcntl
+getdtablesize
+getopt-posix
+inet_ntop
+inet_pton
+netinet_in
+pthread
 read-file
 safe-alloc
-warnings
-sys_wait
 sigaction
-pthread
-unistd
-getdtablesize
 signal
-arpa_inet
-sys_ioctl
-getopt-posix
+socket
 string
+sys_ioctl
 sys_socket
-socket
-netinet_in
+sys_wait
+unistd
 vasprintf
-fcntl
-inet_ntop
-inet_pton
-close
+warnings
 '
 
 # Tell gnulib to:
@@ -94,4 +94,5 @@ $gnulib_tool			\
   --tests-base=gnulib/tests	\
   --aux-dir=build/aux           \
   --quiet                       \
+  --libtool                     \
   --import $modules
diff --git a/configure.ac b/configure.ac
index cba128b..c1e000d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,7 @@
 AC_INIT(netcf, 0.1.6)
 AC_CONFIG_SRCDIR([src/netcf.c])
 AC_CONFIG_AUX_DIR([build/aux])
+AC_CONFIG_MACRO_DIR([gnulib/m4])
 AM_CONFIG_HEADER([config.h])
 AM_INIT_AUTOMAKE([-Wno-portability 1.11 color-tests parallel-tests])
 AM_SILENT_RULES([yes]) # make --enable-silent-rules the default.
@@ -25,14 +26,6 @@ PLATFORM_WIN32="no"
 case "$host" in
 	*-*-mingw*)
 		PLATFORM_WIN32="yes"
-		MINGW_EXTRA_LDFLAGS="-no-undefined"
-	;;
-	*-*-cygwin*)
-		MINGW_EXTRA_LDFLAGS="-no-undefined"
-	;;
-	*-*-linux*)
-		MINGW_EXTRA_LDFLAGS="-no-undefined"
-	;;
 	*)
 	;;
 esac
diff --git a/mingw32-netcf.spec.in b/mingw32-netcf.spec.in
index bdae12b..489dafb 100644
--- a/mingw32-netcf.spec.in
+++ b/mingw32-netcf.spec.in
@@ -3,6 +3,7 @@
 %global _use_internal_dependency_generator 0
 %global __find_requires %{_mingw32_findrequires}
 %global __find_provides %{_mingw32_findprovides}
+%define __debug_install_post %{_mingw32_debug_install_post}
 
 Name:           mingw32-netcf
 Version:        @VERSION@
@@ -53,20 +54,17 @@ rm -rf $RPM_BUILD_ROOT
 %defattr(-,root,root,-)
 %{_mingw32_bindir}/ncftool.exe
 %{_mingw32_bindir}/libnetcf-1.dll
+%{_mingw32_includedir}/*.h
 %{_mingw32_libdir}/pkgconfig/netcf.pc
-%{_mingw32_libdir}/libnetcf-1.dll.a
-%{_mingw32_libdir}/libnetcf-1.la
+%{_mingw32_libdir}/libnetcf.dll.a
+%{_mingw32_libdir}/libnetcf.la
 %{_mingw32_datadir}
 
 %doc AUTHORS COPYING NEWS
 
 %changelog
-* Mon Sep 1 2010 Adam Stokes <ajs at redhat.com> - 0.1.6-2
-- Update spec to not require .dll.a or *.la
-- Fixed building of DLL
-
-* Thu Apr 16 2010 Laine Stump <laine at redhat.com> - 0.1.6-1
-- New version
+* Mon Sep 1 2010 Adam Stokes <ajs at redhat.com> - 0.1.6-1
+- MinGW Port
 
 * Mon Nov 30 2009 David Lutterkort <lutter at redhat.com> - 0.1.5-1
 - New version
diff --git a/src/Makefile.am b/src/Makefile.am
index 16f8f1e..98025cc 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -5,7 +5,7 @@ GNULIB_CFLAGS= -I $(top_srcdir)/gnulib/lib
 AM_CFLAGS = $(NETCF_CFLAGS) $(GNULIB_CFLAGS) $(WARN_CFLAGS) \
   $(LIBXML_CFLAGS) $(LIBXSLT_CFLAGS) $(LIBAUGEAS_CFLAGS)
 
-include_HEADERS = netcf.h
+include_HEADERS = netcf.h netcf_win.h
 
 lib_LTLIBRARIES = libnetcf.la
 
@@ -32,14 +32,12 @@ libnetcf_la_SOURCES = netcf.h netcf.c internal.h \
      ref.h list.h \
      xslt_ext.c $(DRIVER_SOURCES)
 libnetcf_la_LDFLAGS = -Wl,--version-script=netcf.syms \
-     -version-info $(LIBNETCF_VERSION_INFO) @MINGW_EXTRA_LDFLAGS@
+     -version-info $(LIBNETCF_VERSION_INFO) -no-undefined
 libnetcf_la_LIBADD = $(NETCF_LIBDEPS) $(GNULIB)
 if PLATFORM_WIN32
 libnetcf_la_LIBADD += $(WIN32LIB)
 endif
 
-#libnetcf_la_DEPENDENCIES = $(libnetcf_la_LIBADD) netcf.syms
-
 ncftool_SOURCES = ncftool.c
 ncftool_LDADD = libnetcf.la $(READLINE_LIBS) $(GNULIB)
 
diff --git a/src/netcf.c b/src/netcf.c
index f43d1c2..7948d0b 100644
--- a/src/netcf.c
+++ b/src/netcf.c
@@ -109,7 +109,12 @@ int ncf_init(struct netcf **ncf, const char *root) {
     if ((*ncf)->data_dir == NULL)
         (*ncf)->data_dir = NETCF_DATADIR "/netcf";
     (*ncf)->debug = getenv("NETCF_DEBUG") != NULL;
+#ifdef WIN32
+    return 0;
+#else
+    /* Needs investigation on WIN32 */
     return drv_init(*ncf);
+#endif
  oom:
     ncf_close(*ncf);
     *ncf = NULL;
@@ -159,12 +164,16 @@ struct netcf_if * ncf_lookup_by_name(struct netcf *ncf, const char *name) {
     return drv_lookup_by_name(ncf, name);
 }
 
+#ifdef WIN32
+int ncf_lookup_by_mac_string() { return -1; }
+#else
 int
 ncf_lookup_by_mac_string(struct netcf *ncf, const char *mac,
                          int maxifaces, struct netcf_if **ifaces) {
     API_ENTRY(ncf);
     return drv_lookup_by_mac_string(ncf, mac, maxifaces, ifaces);
 }
+#endif
 
 /*
  * Define/start/stop/undefine interfaces
@@ -188,10 +197,15 @@ const char *ncf_if_mac_string(struct netcf_if *nif) {
 }
 
 /* Delete the definition */
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_if_undefine() { return -1; };
+#else
 int ncf_if_undefine(struct netcf_if *nif) {
     API_ENTRY(nif->ncf);
     return drv_undefine(nif);
 }
+#endif
 
 /* Bring the interface up */
 int ncf_if_up(struct netcf_if *nif) {
@@ -210,28 +224,43 @@ int ncf_if_down(struct netcf_if *nif) {
 /* Produce an XML description for the interface, in the same format that
  * NCF_DEFINE expects
  */
+#ifdef WIN32
+/* No mingw implementation */
+char *ncf_if_xml_desc() { return NULL; }
+#else
 char *ncf_if_xml_desc(struct netcf_if *nif) {
     API_ENTRY(nif->ncf);
     return drv_xml_desc(nif);
 }
+#endif
 
 /* Produce an XML description of the current live state of the
  * interface, in the same format that NCF_DEFINE expects, but
  * potentially with extra info not contained in the static config (ie
  * the current IP address of an interface that uses DHCP)
  */
+#ifdef WIN32
+/* No mingw implementation */
+char *ncf_if_xml_state() { return NULL; }
+#else
 char *ncf_if_xml_state(struct netcf_if *nif) {
     API_ENTRY(nif->ncf);
     return drv_xml_state(nif);
 }
+#endif
 
 /* Report various status info about the interface as bits in
  * "flags". Returns 0 on success, -1 on failure
  */
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_if_status() { return -1; }
+#else
 int ncf_if_status(struct netcf_if *nif, unsigned int *flags) {
     API_ENTRY(nif->ncf);
     return drv_if_status(nif, flags);
 }
+#endif
 
 /* Release any resources used by this NETCF_IF; the pointer is invalid
  * after this call
@@ -258,17 +287,27 @@ int ncf_error(struct netcf *ncf, const char **errmsg, const char **details) {
 /*
  * Test interface
  */
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_get_aug() { return -1; }
+#else
 int ncf_get_aug(struct netcf *ncf, const char *ncf_xml, char **aug_xml) {
     API_ENTRY(ncf);
 
     return drv_get_aug(ncf, ncf_xml, aug_xml);
 }
+#endif
 
+#ifdef WIN32
+/* No mingw implementation */
+int ncf_put_aug() { return -1; }
+#else
 int ncf_put_aug(struct netcf *ncf, const char *aug_xml, char **ncf_xml) {
     API_ENTRY(ncf);
 
     return drv_put_aug(ncf, aug_xml, ncf_xml);
 }
+#endif
 
 #ifndef WIN32
 /* Do not see any other way around this as there is no
diff --git a/src/netcf_win.c b/src/netcf_win.c
index a1dbd5c..166465e 100644
--- a/src/netcf_win.c
+++ b/src/netcf_win.c
@@ -5,15 +5,15 @@
 #include <stdlib.h>
 #include "netcf_win.h"
 
-#define MAX_TRIES 3
+#define ADDR_BLOCK 5
 #define GAA_FLAGS ( GAA_FLAG_SKIP_DNS_SERVER | GAA_FLAG_SKIP_MULTICAST )
-#define BUFSIZE 8192
+#define BUFSIZE 1024
 
 PMIB_IPADDRTABLE _get_ip_addr_table(PMIB_IPADDRTABLE ipAddrTable) {
     DWORD r = 0;
     DWORD buf = 0;
 
-    ipAddrTable = (PMIB_IPADDRTABLE) malloc(sizeof (MIB_IPADDRTABLE));
+    ipAddrTable = (PMIB_IPADDRTABLE) sizeof (MIB_IPADDRTABLE);
     if (GetIpAddrTable(ipAddrTable, &buf, 0) == ERROR_INSUFFICIENT_BUFFER) {
 	free(ipAddrTable);
 	ipAddrTable = (PMIB_IPADDRTABLE) malloc(buf);
@@ -55,7 +55,7 @@ PIP_ADAPTER_ADDRESSES _get_ip_adapter_info(PIP_ADAPTER_ADDRESSES addrList) {
     DWORD r;
     int i;
 
-    for(i = 0; i < 5; i++) {
+    for(i = 0; i < ADDR_BLOCK; i++) {
 	r = GetAdaptersAddresses(AF_INET, GAA_FLAGS, NULL, addrList, &bufferLength);
 	if (r != ERROR_BUFFER_OVERFLOW) {
 	    break;
@@ -72,56 +72,6 @@ PIP_ADAPTER_ADDRESSES _get_ip_adapter_info(PIP_ADAPTER_ADDRESSES addrList) {
     free(addrList);
 }
 
-/* All undefined routines in windows */
-int drv_get_aug(struct netcf *ncf, const char *ncf_xml, char **aug_xml) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
-int drv_if_status(struct netcf_if *nif, unsigned int *flags) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
-int drv_init(struct netcf *ncf) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
-int drv_lookup_by_mac_string(struct netcf *ncf, const char *mac,
-			     int maxifaces, struct netcf_if **ifaces) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
-int drv_put_aug(struct netcf *ncf, const char *aug_xml, char **ncf_xml) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
-int drv_undefine(struct netcf_if *nif) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
-char *drv_xml_desc(struct netcf_if *nif) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
-char *drv_xml_state(struct netcf_if *nif) {
-#ifdef WIN32
-    return -1;
-#endif
-}
-
 struct netcf_if *drv_define(struct netcf *ncf, const char *xml_str) {
 #ifdef WIN32
     return ncf;
@@ -304,7 +254,7 @@ static int list_interface_ids(struct netcf *ncf ATTRIBUTE_UNUSED,
     adapterp = _get_ip_adapter_info(addrList);
     for (nint = 0; adapterp != NULL; nint++) {
 	if (names) {
-	    char name[8192];
+	    char name[BUFSIZE];
 	    WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
 				-1, name, sizeof(name), NULL, NULL);
 	    names[nint] = strdup(name);
@@ -338,7 +288,7 @@ struct netcf_if *drv_lookup_by_name(struct netcf *ncf, const char *name) {
     adapterp = _get_ip_adapter_info(addrList);
     for (nint = 0; adapterp != NULL; nint++) {
 	if (name) {
-	    char wName[8192];
+	    char wName[BUFSIZE];
 	    WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
 				-1, wName, sizeof(wName), NULL, NULL);
 	    if (strcmp(wName, name) == 0) {
@@ -357,26 +307,24 @@ struct netcf_if *drv_lookup_by_name(struct netcf *ncf, const char *name) {
 
 const char *drv_mac_string(struct netcf_if *nif) {
     // struct netcf *ncf = nif->ncf;
-    char mac[256];
 
     PIP_ADAPTER_ADDRESSES addrList = NULL;
     PIP_ADAPTER_ADDRESSES adapterp = NULL;
     adapterp = _get_ip_adapter_info(addrList);
     while(adapterp != NULL) {
-	char wName[8192];
+	char wName[BUFSIZE];
 	WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
 			    -1, wName, sizeof(wName), NULL, NULL);
        	if (strcmp(wName,nif->name) == 0) {
 	    if ((int)adapterp->PhysicalAddressLength >= 6)
 		continue; /* just want ethernet for now */
-	    sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X",
-		    adapterp->PhysicalAddress[0],
-		    adapterp->PhysicalAddress[1],
-		    adapterp->PhysicalAddress[2],
-		    adapterp->PhysicalAddress[3],
-		    adapterp->PhysicalAddress[4],
-		    adapterp->PhysicalAddress[5]);
-	    nif->mac = strdup(mac);
+	    nif->mac = asprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X",
+				adapterp->PhysicalAddress[0],
+				adapterp->PhysicalAddress[1],
+				adapterp->PhysicalAddress[2],
+				adapterp->PhysicalAddress[3],
+				adapterp->PhysicalAddress[4],
+				adapterp->PhysicalAddress[5]);
 	    goto done;
 	}
 	adapterp = adapterp->Next;
@@ -395,7 +343,7 @@ int drv_if_down(struct netcf_if *nif) {
     if (intfTableDup != NULL) {
 	for (i = 0; i < (int) intfTableDup->dwNumEntries; i++) {
 	    intRow = (PMIB_IFROW) & intfTableDup->table[i];
-	    char wName[8192];
+	    char wName[BUFSIZE];
 	    WideCharToMultiByte(CP_UTF8, 0, intRow->wszName,
 				-1, wName, sizeof(wName), NULL, NULL);
 	    if (strcmp(wName,nif->name) == 0) {
@@ -421,7 +369,7 @@ int drv_if_up(struct netcf_if *nif) {
     if (intfTableDup != NULL) {
 	for (i = 0; i < (int) intfTableDup->dwNumEntries; i++) {
 	    intRow = (PMIB_IFROW) & intfTableDup->table[i];
-	    char wName[8192];
+	    char wName[BUFSIZE];
 	    WideCharToMultiByte(CP_UTF8, 0, intRow->wszName,
 				-1, wName, sizeof(wName), NULL, NULL);
 	    if (strcmp(wName,nif->name) == 0) {
@@ -507,7 +455,7 @@ int drv_add_ip_address(struct netcf_if *nif, char *ipAddr, char *netmask) {
     if (ipAddrTableDup != NULL) {
 	for(i=0;i<ipAddrTableDup->dwNumEntries;i++) {
 	    ifIndex = ipAddrTableDup->table[i].dwIndex;
-	    char wName[8192];
+	    char wName[BUFSIZE];
 	    WideCharToMultiByte(CP_UTF8, 0, adapterp->FriendlyName,
 				-1, wName, sizeof(wName), NULL, NULL);
 	    if (strcmp(wName,nif->name) == 0) {
diff --git a/src/netcf_win.h b/src/netcf_win.h
index c1bb1d6..845082a 100644
--- a/src/netcf_win.h
+++ b/src/netcf_win.h
@@ -1,7 +1,7 @@
 /*
  * netcf-win.h: windows functions
  *
- * Copyright (C) 2009-2010 Red Hat Inc.
+ * Copyright (C) 2010 Red Hat Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -42,28 +42,7 @@
 #include "ref.h"
 #include "list.h"
 
-static int aug_put_xml(struct netcf *ncf, xmlDocPtr xml);
-static int bridge_slaves(struct netcf *ncf, const char *name, char ***slaves);
-static int cmpstrp(const void *p1, const void *p2);
-static int is_slave(struct netcf *ncf, const char *intf);
-static int list_ifcfg_paths(struct netcf *ncf, char ***intf);
-static int list_interface_ids(struct netcf *ncf, int maxnames, char **names,
-			      unsigned int flags, const char *id_attr);
-static int list_interfaces(struct netcf *ncf, char ***intf);
-static int uniq_ifcfg_paths(struct netcf *ncf, int ndevs, char **devs, char ***intf);
-static bool has_ifcfg_file(struct netcf *ncf, const char *name);
-static bool is_bond(struct netcf *ncf, const char *name);
-static bool is_bridge(struct netcf *ncf, const char *name);
-static char *device_name_from_xml(struct netcf *ncf, xmlDocPtr ncf_xml);
-static char *find_ifcfg_path_by_device(struct netcf *ncf, const char *name);
-static char *find_ifcfg_path_by_hwaddr(struct netcf *ncf, const char *mac);
-static char *find_ifcfg_path(struct netcf *ncf, const char *name);
-static void bond_setup(struct netcf *ncf, const char *name, bool alias);
-static void bridge_physdevs(struct netcf *ncf);
-static void rm_all_interfaces(struct netcf *ncf, xmlDocPtr ncf_xml);
-static void rm_interface(struct netcf *ncf, const char *name);
-static xmlDocPtr aug_get_xml_for_nif(struct netcf_if *nif);
-static xmlDocPtr aug_get_xml(struct netcf *ncf, int nint, char **intf);
+
 struct netcf_if *make_netcf_if(struct netcf *ncf, char *name);
 int xasprintf(char **strp, const char *format, ...);
 
-- 
1.7.2.3



More information about the netcf-devel mailing list