Hello community,
here is the log from the commit of package efivar for openSUSE:Factory checked in at 2016-03-16 10:42:57
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/efivar (Old)
and /work/SRC/openSUSE:Factory/.efivar.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "efivar"
Changes:
--------
--- /work/SRC/openSUSE:Factory/efivar/efivar.changes 2015-12-23 08:48:18.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.efivar.new/efivar.changes 2016-03-16 10:42:58.000000000 +0100
@@ -1,0 +2,19 @@
+Wed Mar 9 04:23:29 UTC 2016 - glin@suse.com
+
+- Update to 0.23
+- Add efivar-nvme-rename.patch and efivar-nvme-no-kernel-header.patch
+ to work around the missing kernel header.
+- Add efivar-no-static.patch to remove efivar-static since it
+ causes build failure and we don't really need it.
+- Remove efivar-fix-initializer.patch since it's already in 0.23.
+- Remove _smp_mflags since the Makefile doesn't work well with
+ the flag.
+
+-------------------------------------------------------------------
+Wed Feb 10 15:31:35 UTC 2016 - rguenther@suse.com
+
+- Add efivar-0.21-gcc6.diff to fix strict-aliasing issue.
+- Build with -Wno-nonnull as efivar tests nonnull args for zero
+ and that breaks with its use of -Werror.
+
+-------------------------------------------------------------------
Old:
----
efivar-0.21.tar.bz2
efivar-fix-initializer.patch
New:
----
efivar-0.21-gcc6.diff
efivar-0.23.tar.bz2
efivar-no-static.patch
efivar-nvme-no-kernel-header.patch
efivar-nvme-rename.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ efivar.spec ++++++
--- /var/tmp/diff_new_pack.utvyp2/_old 2016-03-16 10:42:59.000000000 +0100
+++ /var/tmp/diff_new_pack.utvyp2/_new 2016-03-16 10:42:59.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package efivar
#
-# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,14 +17,17 @@
Name: efivar
-Version: 0.21
+Version: 0.23
Release: 0
Summary: Tools to manage UEFI variables
License: LGPL-2.1
Group: Development/Libraries/Other
Url: https://github.com/rhinstaller/efivar
Source0: https://github.com/rhinstaller/efivar/releases/download/%{version}/%{name}-%{version}.tar.bz2
-Patch1: efivar-fix-initializer.patch
+Patch1: efivar-0.21-gcc6.diff
+Patch2: efivar-no-static.patch
+Patch3: efivar-nvme-rename.patch
+Patch4: efivar-nvme-no-kernel-header.patch
BuildRequires: fdupes
BuildRequires: pkg-config
BuildRequires: popt-devel
@@ -50,12 +53,14 @@
%prep
%setup -q
-%patch1 -p1
+%patch1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
%build
-export CFLAGS="%{optflags}"
+export CFLAGS="%{optflags} -Wno-nonnull"
make \
- %{?_smp_mflags} \
libdir=%{_libdir} \
bindir=%{_bindir}
++++++ efivar-0.21-gcc6.diff ++++++
--- src/util.h.orig 2016-02-10 15:29:15.245050330 +0000
+++ src/util.h 2016-02-10 15:29:18.957092775 +0000
@@ -175,14 +175,14 @@
} \
} \
if (_rc >= 0) { \
- uint8_t *_buf2 = alloca(_bufsize); \
+ void *_buf2 = alloca(_bufsize); \
_saved_errno = errno; \
if (_buf2) { \
memcpy(_buf2, _buf, _bufsize); \
_rc = _bufsize; \
} \
free(_buf); \
- *((uint8_t **)buf) = _buf2; \
+ *((void **)buf) = _buf2; \
errno = _saved_errno; \
} \
_rc; \
++++++ efivar-0.21.tar.bz2 -> efivar-0.23.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/.gitignore new/efivar-0.23/.gitignore
--- old/efivar-0.21/.gitignore 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/.gitignore 2016-02-15 20:38:42.000000000 +0100
@@ -11,8 +11,10 @@
*.tar.*
.*.c.P
.*.h.P
+.*.d
core.*
*.spec
src/efivar
src/efivar-static
src/makeguids
+src/guid-symbols.c
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/Make.defaults new/efivar-0.23/Make.defaults
--- old/efivar-0.21/Make.defaults 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/Make.defaults 2016-02-15 20:38:42.000000000 +0100
@@ -1,26 +1,38 @@
-INSTALL ?= install
-libdir ?= /usr/lib64/
-mandir ?= /usr/share/man/
-includedir ?= /usr/include/
-bindir ?= /usr/bin/
+prefix ?= /usr/
+libdir ?= $(prefix)/lib64/
+datadir ?= $(prefix)/share/
+mandir ?= $(datadir)/man/
+includedir ?= $(prefix)/include/
+bindir ?= $(prefix)/bin/
PCDIR ?= $(libdir)/pkgconfig/
-CC := $(if $(filter default,$(origin CC)),gcc,$(CC))
+DESTDIR ?=
+
+INSTALL ?= install
+CROSS_COMPILE ?=
+PKG_CONFIG = $(CROSS_COMPILE)pkg-config
+CC := $(if $(filter default,$(origin CC)),$(CROSS_COMPILE)gcc,$(CC))
CCLD := $(if $(filter undefined,$(origin CCLD)),$(CC),$(CCLD))
CFLAGS ?= -O2 -g
+CFLAGS := $(CFLAGS)
+LDFLAGS ?=
+LDFLAGS := $(LDFLAGS)
+AR := $(CROSS_COMPILE)gcc-ar
+NM := $(CROSS_COMPILE)gcc-nm
+RANLIB := $(CROSS_COMPILE)gcc-ranlib
+
+PKGS =
-ARCH = $(shell uname -m)
clang_cflags =
-gcc_cflags = -Wmaybe-uninitialized
-cflags := $(CFLAGS) \
- -Werror -Wall -Wsign-compare -Wstrict-aliasing \
- -std=gnu11 -fshort-wchar -fPIC \
- -fvisibility=hidden \
- -D_GNU_SOURCE -I${TOPDIR}/src/include/efivar/ \
- $(if $(filter $(CC),clang),$(clang_cflags),) \
- $(if $(filter $(CC),gcc),$(gcc_cflags),)
+gcc_cflags = -specs=$(TOPDIR)/gcc.specs
+cflags = $(CFLAGS) -I${TOPDIR}/src/include/efivar/ \
+ $(if $(findstring clang,$(CC)),$(clang_cflags),) \
+ $(if $(findstring gcc,$(CC)),$(gcc_cflags),) \
+ $(call pkg-config-cflags)
clang_ccldflags =
-gcc_ccldflags = -fno-merge-constants
-ccldflags := $(cflags) $(CCLDFLAGS) $(LDFLAGS) \
- $(if $(filter $(CCLD),clang),$(clang_ccldflags),) \
- $(if $(filter $(CCLD),gcc),$(gcc_ccldflags),)
-LIBFLAGS += -shared
+gcc_ccldflags =
+ccldflags = $(cflags) -L. $(CCLDFLAGS) $(LDFLAGS) \
+ $(if $(findstring clang,$(CCLD)),$(clang_ccldflags),) \
+ $(if $(findstring gcc,$(CCLD)),$(gcc_ccldflags),) \
+ $(call pkg-config-ccldflags)
+SOFLAGS=-shared
+LDLIBS=$(foreach lib,$(LIBS),-l$(lib)) $(call pkg-config-ldlibs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/Make.rules new/efivar-0.23/Make.rules
--- old/efivar-0.21/Make.rules 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/Make.rules 2016-02-15 20:38:42.000000000 +0100
@@ -1,26 +1,37 @@
+default : all
+
+.PHONY: default all deps clean install test
+
+include $(TOPDIR)/Make.version
+
%.a :
$(AR) -cvqs $@ $^
-% : %.o
- $(CCLD) $(ccldflags) -o $@ $^ $(foreach lib,$(LIBS),-l$(lib))
+% : %.c
-%.so.$(VERSION) :
- $(CCLD) $(cflags) -Wl,-soname,$(patsubst %.so.$(VERSION),%.so.$(MAJOR_VERSION),$@) $(ccldflags) $(LIBFLAGS) $^ -o $@ $(foreach lib,$(LIBS),-l$(lib))
+% : %.c
+ $(CCLD) $(ccldflags) $(CPPFLAGS) -o $@ $^ $(LDLIBS)
-%.so : %.so.$(VERSION)
- ln -sf $< $@
+%-static : ccldflags+=-static
+%-static : %.c
+ $(CCLD) $(ccldflags) $(CPPFLAGS) -o $@ $^ $(LDLIBS)
-%.so.$(MAJOR_VERSION) : %.so.$(VERSION)
- ln -sf $< $@
+%.so :
+ $(CCLD) $(ccldflags) $(CPPFLAGS) $(SOFLAGS) \
+ -Wl,-soname,$@.$(MAJOR_VERSION) \
+ -o $@ $^ $(LDLIBS)
-%.o: %.c
- $(CC) $(cflags) $(CPPFLAGS) -c -o $@ $<
+%.o : %.c
+ $(CC) $(cflags) -fPIC $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
-.%.c.P : %.c
- $(CC) $(cflags) $(CPPFLAGS) -DEFIVAR_BUILD_ENVIRONMENT -M -MM -MF $@ $^
+%.static.o : %.c
+ $(CC) $(cflags) -fPIE $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
-.%.h.P : %.h
- $(CC) $(cflags) $(CPPFLAGS) -DEFIVAR_BUILD_ENVIRONMENT -M -MM -MF $@ $^
+%.o : %.S
+ $(CC) $(cflags) -fPIC $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
+
+%.static.o : %.S
+ $(CC) $(cflags) -fPIE $(CPPFLAGS) -c -o $@ $(filter %.c %.o %.S,$^)
%.S: %.c
$(CC) $(cflags) $(CPPFLAGS) -S $< -o $@
@@ -29,3 +40,27 @@
$(CC) $(cflags) $(CPPFLAGS) -E $< -o $@
%.c : %.h
+
+define substitute-version =
+ sed \
+ -e "s,@@VERSION@@,$(VERSION),g" \
+ -e "s,@@LIBDIR@@,$(libdir),g" \
+ $(1) > $(2)
+endef
+
+%.pc : %.pc.in
+ @$(call substitute-version,$<,$@)
+%.spec : %.spec.in
+ @$(call substitute-version,$<,$@)
+
+pkg-config-cflags = \
+ $(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --cflags $(PKGS); fi)
+pkg-config-ldflags = \
+ $(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --libs-only-L --libs-only-other $(PKGS) ; fi)
+pkg-config-ldlibs = \
+ $(shell if [ -n "$(PKGS)" ]; then $(PKG_CONFIG) --libs-only-l $(PKGS) ; fi)
+
+define deps-of =
+ $(foreach src,$(filter %.c,$(1)),$(patsubst %.c,.%.d,$(src))) \
+ $(foreach src,$(filter %.S,$(1)),$(patsubst %.S,.%.d,$(src)))
+endef
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/Make.version new/efivar-0.23/Make.version
--- old/efivar-0.21/Make.version 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/Make.version 2016-02-15 20:38:42.000000000 +0100
@@ -1,3 +1,3 @@
MAJOR_VERSION = 0
-MINOR_VERSION = 21
+MINOR_VERSION = 23
VERSION = $(MAJOR_VERSION).$(MINOR_VERSION)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/Makefile new/efivar-0.23/Makefile
--- old/efivar-0.21/Makefile 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/Makefile 2016-02-15 20:38:42.000000000 +0100
@@ -1,26 +1,26 @@
TOPDIR = $(shell echo $$PWD)
include $(TOPDIR)/Make.version
+include $(TOPDIR)/Make.rules
+include $(TOPDIR)/Make.defaults
SUBDIRS := src docs
-all : $(SUBDIRS) efivar.spec
+all clean install deps :: | Make.version
+ @set -e ; for x in $(SUBDIRS) ; do \
+ $(MAKE) -C $$x $@ ; \
+ done
+
+all :: efivar.spec
efivar efivar-static :
- $(MAKE) -C src TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@
+ $(MAKE) -C src $@
$(SUBDIRS) :
- $(MAKE) -C $@ TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH)
-
-clean :
- @set -e ; for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) $@ ; done
- @rm -vf efivar.spec
-
-install :
- @set -e ; for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) DESTDIR=$(DESTDIR) includedir=$(includedir) bindir=$(bindir) libdir=$(libdir) PCDIR=$(PCDIR) $@ ; done
+ $(MAKE) -C $@
brick : all
- @set -e ; for x in $(SUBDIRS) ; do $(MAKE) -C $${x} TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/$@/ ARCH=$(ARCH) test ; done
+ @set -e ; for x in $(SUBDIRS) ; do $(MAKE) -C $${x} test ; done
a :
@if [ $${EUID} != 0 ]; then \
@@ -28,13 +28,12 @@
exit 1 ; \
fi
-.PHONY: $(SUBDIRS) all clean install a brick
+.PHONY: $(SUBDIRS) a brick
-include $(TOPDIR)/Make.defaults
-include $(TOPDIR)/Make.rules
+efivar.spec : | Makefile Make.version
-efivar.spec : efivar.spec.in Makefile
- @sed -e "s,@@VERSION@@,$(VERSION),g" $< > $@
+clean ::
+ @rm -vf efivar.spec
GITTAG = $(VERSION)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/docs/Makefile new/efivar-0.23/docs/Makefile
--- old/efivar-0.21/docs/Makefile 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/docs/Makefile 2016-02-15 20:38:42.000000000 +0100
@@ -1,8 +1,9 @@
-SRCDIR = .
-TOPDIR = $(SRCDIR)/..
+SRCDIR = $(realpath .)
+TOPDIR = $(realpath ..)
-include $(TOPDIR)/Make.defaults
include $(TOPDIR)/Make.version
+include $(TOPDIR)/Make.rules
+include $(TOPDIR)/Make.defaults
MAN1TARGETS = efivar.1
MAN3TARGETS = efi_append_variable.3 \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/efivar.spec new/efivar-0.23/efivar.spec
--- old/efivar-0.21/efivar.spec 2015-07-13 22:00:38.000000000 +0200
+++ new/efivar-0.23/efivar.spec 2016-02-15 21:02:55.000000000 +0100
@@ -1,5 +1,5 @@
Name: efivar
-Version: 0.21
+Version: 0.23
Release: 1%{?dist}
Summary: Tools to manage UEFI variables
License: LGPLv2.1
@@ -38,7 +38,7 @@
git config --unset user.name
%build
-make libdir=%{_libdir} bindir=%{_bindir} OPT_FLAGS="$RPM_OPT_FLAGS"
+make libdir=%{_libdir} bindir=%{_bindir} CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS"
%install
rm -rf $RPM_BUILD_ROOT
@@ -56,6 +56,7 @@
%license COPYING
%doc README.md
%{_bindir}/efivar
+%exclude %{_bindir}/efivar-static
%{_mandir}/man1/*
%files devel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/efivar.spec.in new/efivar-0.23/efivar.spec.in
--- old/efivar-0.21/efivar.spec.in 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/efivar.spec.in 2016-02-15 20:38:42.000000000 +0100
@@ -38,7 +38,7 @@
git config --unset user.name
%build
-make libdir=%{_libdir} bindir=%{_bindir} OPT_FLAGS="$RPM_OPT_FLAGS"
+make libdir=%{_libdir} bindir=%{_bindir} CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="$RPM_LD_FLAGS"
%install
rm -rf $RPM_BUILD_ROOT
@@ -56,6 +56,7 @@
%license COPYING
%doc README.md
%{_bindir}/efivar
+%exclude %{_bindir}/efivar-static
%{_mandir}/man1/*
%files devel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/gcc.specs new/efivar-0.23/gcc.specs
--- old/efivar-0.21/gcc.specs 1970-01-01 01:00:00.000000000 +0100
+++ new/efivar-0.23/gcc.specs 2016-02-15 20:38:42.000000000 +0100
@@ -0,0 +1,17 @@
+*cpp:
++ -D_GNU_SOURCE
+
+*efivar_cpp_options:
+ -Werror -Wall -std=gnu11
+
+*cpp_options:
++ %(efivar_cpp_options)
+
+*cc1_options:
++ %(efivar_cpp_options) -Wmaybe-uninitialized -fno-merge-constants -flto -fvisibility=hidden %{!r:%{!fpie:%{!fPIE:%{!fpic:%{!fPIC:%{!fno-pic:-fPIE}}}}}}
+
+*self_spec:
++ %{!shared:%{!static:%{!r:-pie}}} %{static:-Wl,-no-fatal-warnings -Wl,-static -static -Wl,-z,relro,-z,now}
+
+*link:
++ %{!static:--fatal-warnings} --default-symver --no-undefined-version --no-allow-shlib-undefined --add-needed -z now --build-id %{!static:%{!shared:-PIE}} %{shared:-z relro -PIC} %{static:% $@
-
-include/efivar/efivar.h : include/efivar/efivar-guids.h
+makeguids : CPPFLAGS+=-DEFIVAR_BUILD_ENVIRONMENT
+makeguids : LIBS=dl
+makeguids : $(MAKEGUIDS_SOURCES)
-fakeguid.o : guid.c
- $(CC) $(cflags) -DEFIVAR_BUILD_ENVIRONMENT -c -o $@ $<
+guids.o : guids.S | guids.bin names.bin
-makeguids.o : makeguids.c
- $(CC) $(cflags) -DEFIVAR_BUILD_ENVIRONMENT -c -o $@ $<
+$(LIBEFIVAR_OBJECTS) $(LIBEFIBOOT_OBJECTS) : | $(GENERATED_SOURCES)
-makeguids : makeguids.o fakeguid.o
- $(CC) $(cflags) -o $@ $^ -ldl
+libefivar.a : | $(GENERATED_SOURCES)
+libefivar.a : $(patsubst %.o,%.static.o,$(LIBEFIVAR_OBJECTS))
-include/efivar/efivar-guids.h : makeguids guids.txt
- ./makeguids guids.txt guids.bin names.bin guid-symbols.S $@
+libefivar.so : $(LIBEFIVAR_OBJECTS)
+libefivar.so : | $(GENERATED_SOURCES)
+libefivar.so : LIBS=dl
-guidlist.o : guids.S include/efivar/efivar-guids.h
- $(CC) $(cflags) -c -o guidlist.o guids.S
+efivar : efivar.c | libefivar.so
+efivar : LIBS=efivar dl
+efivar : PKGS=popt
-guid-symbols.o : guid-symbols.S
- $(CC) $(cflags) -c -o $@ $<
+efivar-static : efivar.c $(patsubst %.o,%.static.o,$(LIBEFIVAR_OBJECTS))
+efivar-static : | $(GENERATED_SOURCES)
+efivar-static : LIBS=dl
+efivar-static : PKGS=popt
-.INTERMEDIATE: guids.bin names.bin guid-symbols.S
+libefiboot.a : $(patsubst %.o,%.static.o,$(LIBEFIBOOT_OBJECTS))
-deps : $(EFIVAR_DEPS) $(EFIBOOT_DEPS) $(MAKEGUIDS_DEPS)
+libefiboot.so : $(LIBEFIBOOT_OBJECTS)
--include $(EFIVAR_DEPS)
--include $(EFIBOOT_DEPS)
--include $(MAKEGUIDS_DEPS)
+deps :: $(ALL_SOURCES)
+ $(MAKE) -f $(SRCDIR)/Make.deps deps SOURCES="$(ALL_SOURCES)"
clean :
- @rm -rfv *~ *.o *.a *.so *.so.$(MAJOR_VERSION) *.so.$(VERSION) .*.c.P .*.h.P $(PCTARGETS) $(BINTARGETS) $(INCTARGETS) *.bin guid-symbols.S makeguids include/efivar/.*.h.P $(LIBTARGETS)
- @$(MAKE) -C test TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/src/ $@
+ @rm -rfv *~ *.o *.a *.E *.so *.so.* *.pc *.bin .*.d \
+ makeguids guid-symbols.c include/efivar/efivar-guids.h \
+ $(BINTARGETS)
+ @# remove the deps files we used to create, as well.
+ @rm -rfv .*.P .*.h.P *.S.P include/efivar/.*.h.P
install : all
$(INSTALL) -d -m 755 $(DESTDIR)$(libdir)
- $(foreach x, $(LIBTARGETS), $(INSTALL) -m 755 $(x) $(DESTDIR)$(libdir);)
+ $(foreach x,$(LIBTARGETS), \
+ $(INSTALL) -m 755 $(x) $(DESTDIR)$(libdir)/$(x).$(VERSION) ;\
+ ln -fs $(x).$(VERSION) $(DESTDIR)$(libdir)/$(x).$(MAJOR_VERSION);\
+ ln -fs $(x).$(VERSION) $(DESTDIR)$(libdir)/$(x); )
$(INSTALL) -d -m 755 $(DESTDIR)$(PCDIR)
$(foreach x, $(PCTARGETS), $(INSTALL) -m 644 $(x) $(DESTDIR)$(PCDIR) ;)
$(INSTALL) -d -m 755 $(DESTDIR)$(includedir)/efivar
$(foreach x, $(wildcard $(TOPDIR)/src/include/efivar/*.h), $(INSTALL) -m 644 $(x) $(DESTDIR)$(includedir)/efivar/$(notdir $(x));)
$(INSTALL) -d -m 755 $(DESTDIR)$(bindir)
$(foreach x, $(BINTARGETS), $(INSTALL) -m 755 $(x) $(DESTDIR)$(bindir);)
- $(foreach x, $(wildcard *.so.$(VERSION)), ln -fs $(x) $(patsubst %.so.$(VERSION),%.so,$(DESTDIR)$(libdir)/$(x));)
- $(foreach x, $(wildcard *.so.$(VERSION)), ln -fs $(x) $(patsubst %.so.$(VERSION),%.so.$(MAJOR_VERSION),$(DESTDIR)$(libdir)/$(x));)
-test :all
- $(MAKE) -C test TOPDIR=$(TOPDIR) SRCDIR=$(TOPDIR)/src/ $@
+test : all
+ $(MAKE) -C test $@
-.PHONY: all deps clean install test
-
-include $(TOPDIR)/Make.rules
+.PHONY: test
+.SECONDARY : libefivar.so.$(VERSION) libefivar.so.$(MAJOR_VERSION)
+.SECONDARY : libefiboot.so.$(VERSION) libefiboot.so.$(MAJOR_VERSION)
+.SECONDARY : include/efivar/efivar-guids.h guid-symbols.c
+.INTERMEDIATE : guids.bin names.bin
+.PRECIOUS : guid-symbols.o makeguids
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/creator.c new/efivar-0.23/src/creator.c
--- old/efivar-0.21/src/creator.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/creator.c 2016-02-15 20:38:42.000000000 +0100
@@ -49,11 +49,6 @@
char linkbuf[PATH_MAX+1] = "";
ssize_t linklen = 0;
- if (!filepath || !devicep || !relpathp) {
- errno = EINVAL;
- return -1;
- }
-
linklen = strlen(filepath);
if (linklen > PATH_MAX) {
errno = ENAMETOOLONG;
@@ -116,6 +111,8 @@
errno = ENAMETOOLONG;
goto err;
}
+ if (strncmp(linkbuf, me->mnt_dir, mntlen))
+ continue;
*devicep = strdup(me->mnt_fsname);
if (!*devicep)
goto err;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/dp-acpi.c new/efivar-0.23/src/dp-acpi.c
--- old/efivar-0.21/src/dp-acpi.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/dp-acpi.c 2016-02-15 20:38:42.000000000 +0100
@@ -28,7 +28,7 @@
{
ssize_t o = 0;
o += format(buf, size, o, "AcpiAdr(");
- o += format_array(buf, size, o, "%"PRIu32,
+ o += format_array(buf, size, o, "0x%"PRIx32,
typeof(dp->acpi_adr.adr[0]),
dp->acpi_adr.adr,
(efidp_node_size(dp)-4)/sizeof (dp->acpi_adr.adr[0]));
@@ -189,11 +189,6 @@
ssize_t req;
ssize_t sz;
- if (!hidstr || !uidstr || !cidstr) {
- errno = EINVAL;
- return -1;
- }
-
req = sizeof (*acpi_hid) + 3 +
strlen(hidstr) + strlen(uidstr) + strlen(cidstr);
sz = efidp_make_generic(buf, size, EFIDP_ACPI_TYPE, EFIDP_ACPI_HID_EX,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/dp-message.c new/efivar-0.23/src/dp-message.c
--- old/efivar-0.21/src/dp-message.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/dp-message.c 2016-02-15 20:38:42.000000000 +0100
@@ -22,7 +22,7 @@
#include
#include
-#include "endian.h"
+#include "efivar_endian.h"
#include "dp.h"
static ssize_t
@@ -408,6 +408,7 @@
- sizeof (efidp_header)
- sizeof (efi_guid_t));
}
+ off += format(buf, size, off, ")");
break;
}
case EFIDP_MSG_IPv6: {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/dp.c new/efivar-0.23/src/dp.c
--- old/efivar-0.21/src/dp.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/dp.c 2016-02-15 20:38:42.000000000 +0100
@@ -28,11 +28,6 @@
.subtype = EFIDP_END_ENTIRE,
.length = 4
};
-static const efidp_header end_instance = {
- .type = EFIDP_END_TYPE,
- .subtype = EFIDP_END_INSTANCE,
- .length = 4
-};
static inline void *
efidp_data_address(const_efidp dp)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/dp.h new/efivar-0.23/src/dp.h
--- old/efivar-0.21/src/dp.h 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/dp.h 2016-02-15 20:38:42.000000000 +0100
@@ -127,7 +127,7 @@
_off += format(buf, size, off+_off, fmt, \
((type *)addr)[_i]); \
} \
- _off+off; \
+ _off; \
})
extern ssize_t _format_hw_dn(char *buf, size_t size, const_efidp dp);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/efivar.c new/efivar-0.23/src/efivar.c
--- old/efivar-0.21/src/efivar.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/efivar.c 2016-02-15 20:38:42.000000000 +0100
@@ -329,21 +329,26 @@
prepare_data(file, &data, &data_size);
append_variable(name, data, data_size, attributes);
case ACTION_LIST_GUIDS: {
+ efi_guid_t sentinal = {0xffffffff,0xffff,0xffff,0xffff,
+ {0xff,0xff,0xff,0xff,0xff,0xff}};
extern struct guidname efi_well_known_guids;
extern struct guidname efi_well_known_guids_end;
+ intptr_t start = (intptr_t)&efi_well_known_guids;
+ intptr_t end = (intptr_t)&efi_well_known_guids_end;
+ unsigned int i;
- for (struct guidname *guid = &efi_well_known_guids;
- guid != &efi_well_known_guids_end;
- guid++)
- {
+ struct guidname *guid = &efi_well_known_guids;
+ for (i = 0; i < (end-start) / sizeof(*guid); i++) {
+ if (!efi_guid_cmp(&sentinal, &guid[i].guid))
+ break;
printf("{"GUID_FORMAT"} {%s} %s %s\n",
- guid->guid.a, guid->guid.b,
- guid->guid.c, bswap_16(guid->guid.d),
- guid->guid.e[0], guid->guid.e[1],
- guid->guid.e[2], guid->guid.e[3],
- guid->guid.e[4], guid->guid.e[5],
- guid->symbol + strlen("efi_guid_"),
- guid->symbol, guid->name);
+ guid[i].guid.a, guid[i].guid.b,
+ guid[i].guid.c, bswap_16(guid[i].guid.d),
+ guid[i].guid.e[0], guid[i].guid.e[1],
+ guid[i].guid.e[2], guid[i].guid.e[3],
+ guid[i].guid.e[4], guid[i].guid.e[5],
+ guid[i].symbol + strlen("efi_guid_"),
+ guid[i].symbol, guid[i].name);
}
}
};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/efivar_endian.h new/efivar-0.23/src/efivar_endian.h
--- old/efivar-0.21/src/efivar_endian.h 1970-01-01 01:00:00.000000000 +0100
+++ new/efivar-0.23/src/efivar_endian.h 2016-02-15 20:38:42.000000000 +0100
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2009-2015 Red Hat, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ *
+ * Author: Peter Jones
+ */
+#ifndef _EFIVAR_ENDIAN_H
+#define _EFIVAR_ENDIAN_H
+
+#include
+
+#if __BYTE_ORDER == __LITTLE_ENDIAN
+#define cpu_to_le16(x) (x)
+#define cpu_to_le32(x) (x)
+#define cpu_to_le64(x) (x)
+#define le16_to_cpu(x) (x)
+#define le32_to_cpu(x) (x)
+#define le64_to_cpu(x) (x)
+#define cpu_to_be16(x) __bswap_16(x)
+#define cpu_to_be32(x) __bswap_32(x)
+#define cpu_to_be64(x) __bswap_64(x)
+#define be16_to_cpu(x) __bswap_16(x)
+#define be32_to_cpu(x) __bswap_32(x)
+#define be64_to_cpu(x) __bswap_64(x)
+#else
+#define cpu_to_be16(x) (x)
+#define cpu_to_be32(x) (x)
+#define cpu_to_be64(x) (x)
+#define be16_to_cpu(x) (x)
+#define be32_to_cpu(x) (x)
+#define be64_to_cpu(x) (x)
+#define cpu_to_le16(x) __bswap_16(x)
+#define cpu_to_le32(x) __bswap_32(x)
+#define cpu_to_le64(x) __bswap_64(x)
+#define le16_to_cpu(x) __bswap_16(x)
+#define le32_to_cpu(x) __bswap_32(x)
+#define le64_to_cpu(x) __bswap_64(x)
+#endif
+
+#endif /* _EFIVAR_ENDIAN_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/efivarfs.c new/efivar-0.23/src/efivarfs.c
--- old/efivar-0.21/src/efivarfs.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/efivarfs.c 2016-02-15 20:38:42.000000000 +0100
@@ -33,6 +33,8 @@
#include "generics.h"
#include "util.h"
+#include
+
#define EFIVARS_PATH "/sys/firmware/efi/efivars/"
#ifndef EFIVARFS_MAGIC
@@ -67,6 +69,46 @@
})
static int
+efivarfs_set_immutable(char *path, int immutable)
+{
+ unsigned int flags;
+ typeof(errno) error = 0;
+ int fd;
+ int rc = 0;
+
+ fd = open(path, O_RDONLY);
+ if (fd < 0) {
+ if (errno == ENOTTY)
+ return 0;
+ else
+ return fd;
+ }
+
+ rc = ioctl(fd, FS_IOC_GETFLAGS, &flags);
+ if (rc < 0) {
+ if (errno == ENOTTY) {
+ rc = 0;
+ } else {
+ error = errno;
+ }
+ } else if ((immutable && !(flags & FS_IMMUTABLE_FL)) ||
+ (!immutable && (flags & FS_IMMUTABLE_FL))) {
+ if (immutable)
+ flags |= FS_IMMUTABLE_FL;
+ else
+ flags &= ~FS_IMMUTABLE_FL;
+
+ rc = ioctl(fd, FS_IOC_SETFLAGS, &flags);
+ if (rc < 0)
+ error = errno;
+ }
+
+ close(fd);
+ errno = error;
+ return rc;
+}
+
+static int
efivarfs_get_variable_size(efi_guid_t guid, const char *name, size_t *size)
{
char *path = NULL;
@@ -169,7 +211,9 @@
if (rc < 0)
return -1;
- rc = unlink(path);
+ rc = efivarfs_set_immutable(path, 0);
+ if (rc >= 0)
+ rc = unlink(path);
typeof(errno) errno_value = errno;
free(path);
@@ -216,6 +260,7 @@
} else {
unlink(path);
}
+ efivarfs_set_immutable(path, 1);
err:
errno_value = errno;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/endian.h new/efivar-0.23/src/endian.h
--- old/efivar-0.21/src/endian.h 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/endian.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,51 +0,0 @@
-/*
- * Copyright 2009-2015 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see http://www.gnu.org/licenses/.
- *
- * Author: Peter Jones
- */
-#ifndef _EFIVAR_ENDIAN_H
-#define _EFIVAR_ENDIAN_H
-
-#include
-
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define cpu_to_le16(x) (x)
-#define cpu_to_le32(x) (x)
-#define cpu_to_le64(x) (x)
-#define le16_to_cpu(x) (x)
-#define le32_to_cpu(x) (x)
-#define le64_to_cpu(x) (x)
-#define cpu_to_be16(x) __bswap_16(x)
-#define cpu_to_be32(x) __bswap_32(x)
-#define cpu_to_be64(x) __bswap_64(x)
-#define be16_to_cpu(x) __bswap_16(x)
-#define be32_to_cpu(x) __bswap_32(x)
-#define be64_to_cpu(x) __bswap_64(x)
-#else
-#define cpu_to_be16(x) (x)
-#define cpu_to_be32(x) (x)
-#define cpu_to_be64(x) (x)
-#define be16_to_cpu(x) (x)
-#define be32_to_cpu(x) (x)
-#define be64_to_cpu(x) (x)
-#define cpu_to_le16(x) __bswap_16(x)
-#define cpu_to_le32(x) __bswap_32(x)
-#define cpu_to_le64(x) __bswap_64(x)
-#define le16_to_cpu(x) __bswap_16(x)
-#define le32_to_cpu(x) __bswap_32(x)
-#define le64_to_cpu(x) __bswap_64(x)
-#endif
-
-#endif /* _EFIVAR_ENDIAN_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/export.c new/efivar-0.23/src/export.c
--- old/efivar-0.21/src/export.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/export.c 2016-02-15 20:38:42.000000000 +0100
@@ -68,9 +68,6 @@
if (size <= min)
return -1;
- if (!var_out)
- return -1;
-
uint8_t *ptr = data;
uint32_t magic = EFIVAR_MAGIC;
if (memcmp(data, &magic, sizeof (uint32_t)) ||
@@ -149,10 +146,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_export(efi_variable_t *var, uint8_t *data, size_t size)
{
- if (!var) {
- errno = EINVAL;
- return -1;
- }
size_t name_len = strlen(var->name);
size_t needed = sizeof (uint32_t) /* magic */
@@ -248,11 +241,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_set_name(efi_variable_t *var, char *name)
{
- if (!var || !name) {
- errno = EINVAL;
- return -1;
- }
-
var->name = name;
return 0;
}
@@ -267,11 +255,6 @@
#endif
efi_variable_get_name(efi_variable_t *var)
{
- if (!var) {
- errno = EINVAL;
- return NULL;
- }
-
if (!var->name) {
errno = ENOENT;
} else {
@@ -285,11 +268,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_set_guid(efi_variable_t *var, efi_guid_t *guid)
{
- if (!var || !guid) {
- errno = EINVAL;
- return -1;
- }
-
var->guid = guid;
return 0;
}
@@ -299,11 +277,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_get_guid(efi_variable_t *var, efi_guid_t **guid)
{
- if (!var || !guid) {
- errno = EINVAL;
- return -1;
- }
-
if (!var->guid) {
errno = ENOENT;
return -1;
@@ -318,7 +291,7 @@
__attribute__((__visibility__ ("default")))
efi_variable_set_data(efi_variable_t *var, uint8_t *data, size_t size)
{
- if (!var || !data || !size) {
+ if (!size) {
errno = EINVAL;
return -1;
}
@@ -333,11 +306,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_get_data(efi_variable_t *var, uint8_t **data, size_t *size)
{
- if (!var || !data || !size) {
- errno = EINVAL;
- return -1;
- }
-
if (var->data || !var->data_size) {
errno = ENOENT;
return -1;
@@ -353,11 +321,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_set_attributes(efi_variable_t *var, uint64_t attrs)
{
- if (!var) {
- errno = -EINVAL;
- return -1;
- }
-
var->attrs = attrs;
return 0;
}
@@ -367,11 +330,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_get_attributes(efi_variable_t *var, uint64_t *attrs)
{
- if (!var || !attrs) {
- errno = -EINVAL;
- return -1;
- }
-
if (var->attrs == ATTRS_UNSET) {
errno = ENOENT;
return -1;
@@ -386,11 +344,6 @@
__attribute__((__visibility__ ("default")))
efi_variable_realize(efi_variable_t *var)
{
- if (!var) {
- errno = -EINVAL;
- return -1;
- }
-
if (!var->name || !var->data || !var->data_size ||
var->attrs == ATTRS_UNSET) {
errno = -EINVAL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/guid.c new/efivar-0.23/src/guid.c
--- old/efivar-0.21/src/guid.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/guid.c 2016-02-15 20:38:42.000000000 +0100
@@ -43,17 +43,26 @@
if (!sp) {
return snprintf(NULL, 0, GUID_FORMAT,
- guid->a, guid->b, guid->c, bswap_16(guid->d),
+ le32_to_cpu(guid->a),
+ le16_to_cpu(guid->b),
+ le16_to_cpu(guid->c),
+ be16_to_cpu(guid->d),
guid->e[0], guid->e[1], guid->e[2], guid->e[3],
guid->e[4], guid->e[5]);
} else if (sp && *sp) {
return snprintf(*sp, GUID_LENGTH_WITH_NUL, GUID_FORMAT,
- guid->a, guid->b, guid->c, bswap_16(guid->d),
+ le32_to_cpu(guid->a),
+ le16_to_cpu(guid->b),
+ le16_to_cpu(guid->c),
+ be16_to_cpu(guid->d),
guid->e[0], guid->e[1], guid->e[2], guid->e[3],
guid->e[4], guid->e[5]);
} else {
rc = asprintf(&ret, GUID_FORMAT,
- guid->a, guid->b, guid->c, bswap_16(guid->d),
+ le32_to_cpu(guid->a),
+ le16_to_cpu(guid->b),
+ le16_to_cpu(guid->c),
+ be16_to_cpu(guid->d),
guid->e[0], guid->e[1], guid->e[2], guid->e[3],
guid->e[4], guid->e[5]);
if (rc >= 0)
@@ -62,8 +71,14 @@
return rc;
}
-extern struct guidname efi_well_known_guids[], efi_well_known_names[];
-extern char efi_well_known_guids_end, efi_well_known_names_end;
+extern struct guidname efi_well_known_guids
+ __attribute__((__visibility__ ("default")));
+extern struct guidname efi_well_known_names
+ __attribute__((__visibility__ ("default")));
+extern struct guidname efi_well_known_guids_end
+ __attribute__((__visibility__ ("default")));
+extern struct guidname efi_well_known_names_end
+ __attribute__((__visibility__ ("default")));
static int
__attribute__((__nonnull__ (1, 2)))
@@ -91,15 +106,15 @@
{
intptr_t end = (intptr_t)&efi_well_known_guids_end;
intptr_t start = (intptr_t)&efi_well_known_guids;
- size_t nmemb = (end - start) / sizeof (efi_well_known_guids[0]);
+ size_t nmemb = (end - start) / sizeof (efi_well_known_guids);
struct guidname key;
memset(&key, '\0', sizeof (key));
memcpy(&key.guid, guid, sizeof (*guid));
struct guidname *tmp;
- tmp = bsearch(&key, efi_well_known_guids, nmemb,
- sizeof (efi_well_known_guids[0]), cmpguidp);
+ tmp = bsearch(&key, &efi_well_known_guids, nmemb,
+ sizeof (efi_well_known_guids), cmpguidp);
if (!tmp) {
*result = NULL;
errno = ENOENT;
@@ -166,17 +181,26 @@
}
if (!sp) {
return snprintf(NULL, 0, "{"GUID_FORMAT"}",
- guid->a, guid->b, guid->c, bswap_16(guid->d),
+ le32_to_cpu(guid->a),
+ le16_to_cpu(guid->b),
+ le16_to_cpu(guid->c),
+ be16_to_cpu(guid->d),
guid->e[0], guid->e[1], guid->e[2], guid->e[3],
guid->e[4], guid->e[5]);
} else if (sp && *sp) {
return snprintf(*sp, GUID_LENGTH_WITH_NUL+2, "{"GUID_FORMAT"}",
- guid->a, guid->b, guid->c, bswap_16(guid->d),
+ le32_to_cpu(guid->a),
+ le16_to_cpu(guid->b),
+ le16_to_cpu(guid->c),
+ be16_to_cpu(guid->d),
guid->e[0], guid->e[1], guid->e[2], guid->e[3],
guid->e[4], guid->e[5]);
}
rc = asprintf(&ret, "{"GUID_FORMAT"}",
- guid->a, guid->b, guid->c, bswap_16(guid->d),
+ le32_to_cpu(guid->a),
+ le16_to_cpu(guid->b),
+ le16_to_cpu(guid->c),
+ be16_to_cpu(guid->d),
guid->e[0], guid->e[1], guid->e[2], guid->e[3],
guid->e[4], guid->e[5]);
if (rc >= 0)
@@ -209,12 +233,9 @@
{
intptr_t end = (intptr_t)&efi_well_known_names_end;
intptr_t start = (intptr_t)&efi_well_known_names;
- size_t nmemb = (end - start) / sizeof (efi_well_known_names[0]);
+ size_t nmemb = (end - start) / sizeof (efi_well_known_names);
size_t namelen;
- if (!name || !guid)
- return -1;
-
namelen = strnlen(name, 39);
struct guidname key;
memset(&key, '\0', sizeof (key));
@@ -229,8 +250,8 @@
key.name[sizeof(key.name) - 1] = '\0';
struct guidname *result;
- result = bsearch(&key, efi_well_known_names, nmemb,
- sizeof (efi_well_known_names[0]), cmpnamep);
+ result = bsearch(&key, &efi_well_known_names, nmemb,
+ sizeof (efi_well_known_names), cmpnamep);
if (result != NULL) {
memcpy(guid, &result->guid, sizeof (*guid));
return 0;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/guid.h new/efivar-0.23/src/guid.h
--- old/efivar-0.21/src/guid.h 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/guid.h 2016-02-15 20:38:42.000000000 +0100
@@ -24,6 +24,7 @@
#include
#include
#include
+#include "efivar_endian.h"
#define GUID_FORMAT "%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x"
@@ -105,6 +106,7 @@
if (check_segment_sanity(eightbytes, 8) < 0)
return -1;
guid->a = (uint32_t)strtoul(eightbytes, NULL, 16);
+ guid->a = cpu_to_le32(guid->a);
/* 84be9c3e-8a32-42c0-891c-4cd3b072becc
* ^ */
@@ -112,6 +114,7 @@
if (check_segment_sanity(fourbytes, 4) < 0)
return -1;
guid->b = (uint16_t)strtoul(fourbytes, NULL, 16);
+ guid->b = cpu_to_le16(guid->b);
/* 84be9c3e-8a32-42c0-891c-4cd3b072becc
* ^ */
@@ -119,13 +122,15 @@
if (check_segment_sanity(fourbytes, 4) < 0)
return -1;
guid->c = (uint16_t)strtoul(fourbytes, NULL, 16);
+ guid->c = cpu_to_le16(guid->c);
/* 84be9c3e-8a32-42c0-891c-4cd3b072becc
* ^ */
strncpy(fourbytes, text+19, 4);
if (check_segment_sanity(fourbytes, 4) < 0)
return -1;
- guid->d = bswap_16((uint16_t)strtoul(fourbytes, NULL, 16));
+ guid->d = (uint16_t)strtoul(fourbytes, NULL, 16);
+ guid->d = cpu_to_be16(guid->d);
/* 84be9c3e-8a32-42c0-891c-4cd3b072becc
* ^ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/guids.txt new/efivar-0.23/src/guids.txt
--- old/efivar-0.21/src/guids.txt 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/guids.txt 2016-02-15 20:38:42.000000000 +0100
@@ -30,3 +30,4 @@
e2b36190-879b-4a3d-ad8d-f2e7bba32784 rsa2048_sha256 RSA 2048 with SHA-256
ff3e5307-9fd0-48c9-85f1-8ad56c701e01 sha384 SHA-384
f46ee6f4-4785-43a3-923d-7f786c3c8479 lenovo_startup_interrupt Lenovo Startup Interrupt Menu
+ffffffff-ffff-ffff-ffff-ffffffffffff zzignore-this-guid zzignore-this-guid
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/include/efivar/efivar-dp.h new/efivar-0.23/src/include/efivar/efivar-dp.h
--- old/efivar-0.21/src/include/efivar/efivar-dp.h 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/include/efivar/efivar-dp.h 2016-02-15 20:38:42.000000000 +0100
@@ -770,6 +770,7 @@
int rc = efidp_next_node(dn, &next);
if (rc < 0)
break;
+ dn = next;
}
if (efidp_type(dn) == EFIDP_END_TYPE &&
@@ -851,7 +852,7 @@
break;
int rc = efidp_next_node(dpi, &next);
- if (rc < 1)
+ if (rc < 0)
return -1;
dpi = next;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/include/efivar/efivar.h new/efivar-0.23/src/include/efivar/efivar.h
--- old/efivar-0.21/src/include/efivar/efivar.h 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/include/efivar/efivar.h 2016-02-15 20:38:42.000000000 +0100
@@ -18,6 +18,7 @@
#ifndef EFIVAR_H
#define EFIVAR_H 1
+#include
#include
#include
#include
@@ -39,8 +40,13 @@
#include
#endif
+#if BYTE_ORDER == LITTLE_ENDIAN
#define EFI_GUID(a,b,c,d,e0,e1,e2,e3,e4,e5) \
((efi_guid_t) {(a), (b), (c), bswap_16(d), { (e0), (e1), (e2), (e3), (e4), (e5) }})
+#else
+#define EFI_GUID(a,b,c,d,e0,e1,e2,e3,e4,e5) \
+((efi_guid_t) {(a), (b), (c), (d), { (e0), (e1), (e2), (e3), (e4), (e5) }})
+#endif
#define EFI_GLOBAL_GUID EFI_GUID(0x8be4df61,0x93ca,0x11d2,0xaa0d,0x00,0xe0,0x98,0x03,0x2b,0x8c)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/linux.c new/efivar-0.23/src/linux.c
--- old/efivar-0.21/src/linux.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/linux.c 2016-02-15 20:38:42.000000000 +0100
@@ -59,7 +59,7 @@
char *linkbuf;
ssize_t rc;
- rc = sysfs_readlink(&linkbuf, "/sys/dev/block/%"PRIu64":%hhd",
+ rc = sysfs_readlink(&linkbuf, "/sys/dev/block/%"PRIu64":%hhu",
info->major, info->minor);
if (rc < 0)
return -1;
@@ -81,6 +81,10 @@
}
penultimate++;
+ /*
+ * If there's a better way to figure this out, it'd be good, because
+ * I don't want to have to change this for every new disk type...
+ */
if (!strcmp(penultimate, "block")) {
if (!info->disk_name) {
info->disk_name = strdup(ultimate);
@@ -93,6 +97,18 @@
if (rc < 0)
return -1;
}
+ } else if (!strncmp(penultimate, "nvme", 4)) {
+ if (!info->disk_name) {
+ info->disk_name = strdup(ultimate);
+ if (!info->disk_name)
+ return -1;
+ }
+ if (!info->part_name) {
+ rc = asprintf(&info->part_name, "%sp%d",
+ info->disk_name, info->part);
+ if (rc < 0)
+ return -1;
+ }
} else {
if (!info->disk_name) {
info->disk_name = strdup(penultimate);
@@ -117,7 +133,7 @@
int rc;
unsigned int maj, min;
char *linkbuf;
- char *partbuf;
+ uint8_t *partbuf;
int ret = -1;
rc = stat(devpath, &statbuf);
@@ -129,8 +145,8 @@
return -1;
}
- maj = gnu_dev_major(statbuf.st_rdev);
- min = gnu_dev_minor(statbuf.st_rdev);
+ maj = major(statbuf.st_rdev);
+ min = minor(statbuf.st_rdev);
rc = sysfs_readlink(&linkbuf, "/sys/dev/block/%u:%u", maj, min);
if (rc < 0)
@@ -140,7 +156,7 @@
if (rc < 0)
return -1;
- rc = sscanf(partbuf, "%d\n", &ret);
+ rc = sscanf((char *)partbuf, "%d\n", &ret);
if (rc != 1)
return -1;
return ret;
@@ -185,7 +201,6 @@
{
DIR *d;
struct dirent *de;
- int saved_errno;
uint8_t *buf = NULL;
int rc;
@@ -204,19 +219,18 @@
int rc;
rc = sscanf(de->d_name, "dev%d.%d.%d", &found_print_id,
&found_pmp, &found_devno);
- if (rc == 2) {
- found_devno = found_pmp;
- found_pmp=0;
- } else if (rc != 3) {
- saved_errno = errno;
- closedir(d);
- errno = saved_errno;
- return -1;
- }
- if (found_print_id == print_id) {
- info->sata_info.ata_devno = found_devno;
+ if (rc == 3) {
+ info->sata_info.ata_devno = 0;
info->sata_info.ata_pmp = found_pmp;
break;
+ } else if (rc == 2) {
+ info->sata_info.ata_devno = 0;
+ info->sata_info.ata_pmp = 0x8000;
+ break;
+ } else {
+ closedir(d);
+ errno = EINVAL;
+ return -1;
}
}
closedir(d);
@@ -230,7 +244,6 @@
if (rc != 1)
return -1;
- info->sata_info.ata_port -= 1;
return 0;
}
@@ -340,7 +353,7 @@
{
int rc;
int psz = 0;
- char *filebuf = NULL;
+ uint8_t *filebuf = NULL;
uint64_t sas_address;
*poff = 0;
@@ -434,7 +447,7 @@
if (rc < 0)
return -1;
- rc = sscanf(filebuf, "%"PRIx64, &sas_address);
+ rc = sscanf((char *)filebuf, "%"PRIx64, &sas_address);
if (rc != 1)
return -1;
@@ -477,7 +490,7 @@
return -1;
poff += psz;
- char *fbuf = NULL;
+ uint8_t *fbuf = NULL;
rc = read_sysfs_file(&fbuf,
"/sys/devices/pci%04x:%02x/firmware_node/hid",
root_domain, root_bus);
@@ -847,12 +860,13 @@
__attribute__((__visibility__ ("hidden")))
make_mac_path(uint8_t *buf, ssize_t size, const char * const ifname)
{
- struct ifreq ifr = { 0, };
+ struct ifreq ifr;
struct ethtool_drvinfo drvinfo = { 0, };
int fd, rc;
ssize_t ret = -1, sz, off=0;
char busname[PATH_MAX+1] = "";
+ memset(&ifr, 0, sizeof (ifr));
strncpy(ifr.ifr_name, ifname, IF_NAMESIZE);
drvinfo.cmd = ETHTOOL_GDRVINFO;
ifr.ifr_data = (caddr_t)&drvinfo;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/loadopt.c new/efivar-0.23/src/loadopt.c
--- old/efivar-0.21/src/loadopt.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/loadopt.c 2016-02-15 20:38:42.000000000 +0100
@@ -36,11 +36,6 @@
efidp dp, ssize_t dp_size, unsigned char *description,
uint8_t *optional_data, size_t optional_data_size)
{
- if (!description) {
- errno = EINVAL;
- return -1;
- }
-
ssize_t desc_len = utf8len((uint8_t *)description, 1024) * 2 + 2;
ssize_t sz = sizeof (attributes)
+ sizeof (uint16_t) + desc_len
@@ -90,9 +85,6 @@
size_t sz;
uint8_t *p;
- if (!opt)
- return -1;
-
if (size < sizeof(*opt))
return -1;
size -= sizeof(*opt);
@@ -162,10 +154,6 @@
efi_loadopt_path(efi_load_option *opt)
{
char *p = (char *)opt;
- if (!opt) {
- errno = EINVAL;
- return NULL;
- }
efidp dp = (efidp)(p + sizeof (opt->attributes)
+ sizeof (opt->file_path_list_length)
+ ucs2size(opt->description, -1));
@@ -179,10 +167,6 @@
unsigned char **datap, size_t *len)
{
unsigned char *p = (unsigned char *)opt;
- if (!opt || !datap) {
- errno = EINVAL;
- return -1;
- }
*datap = (unsigned char *)(p + sizeof (opt->attributes)
+ sizeof (opt->file_path_list_length)
+ ucs2size(opt->description, -1)
@@ -203,7 +187,7 @@
int saved_errno;
FILE *f;
- if (!filename || (!buf && size > 0)) {
+ if (!buf && size > 0) {
errno = -EINVAL;
return -1;
}
@@ -241,7 +225,7 @@
efi_loadopt_args_as_utf8(uint8_t *buf, ssize_t size, char *utf8)
{
ssize_t req;
- if (!utf8 || (!buf && size > 0)) {
+ if (!buf && size > 0) {
errno = EINVAL;
return -1;
}
@@ -268,7 +252,7 @@
efi_loadopt_args_as_ucs2(uint16_t *buf, ssize_t size, uint8_t *utf8)
{
ssize_t req;
- if (!utf8 || (!buf && size > 0)) {
+ if (!buf && size > 0) {
errno = EINVAL;
return -1;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/makeguids.c new/efivar-0.23/src/makeguids.c
--- old/efivar-0.21/src/makeguids.c 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/makeguids.c 2016-02-15 20:38:42.000000000 +0100
@@ -30,13 +30,10 @@
efi_guid_t const efi_guid_zero = {0};
efi_guid_t const efi_guid_empty = {0};
-struct guidname efi_well_known_guids[] = {
-};
-char efi_well_known_guids_end;
-
-struct guidname efi_well_known_names[] = {
-};
-char efi_well_known_names_end;
+struct guidname efi_well_known_guids;
+struct guidname efi_well_known_guids_end;
+struct guidname efi_well_known_names;
+struct guidname efi_well_known_names_end;
static int
cmpguidp(const void *p1, const void *p2)
@@ -150,46 +147,54 @@
fprintf(header, "#ifndef EFIVAR_GUIDS_H\n#define EFIVAR_GUIDS_H 1\n\n");
- for (unsigned int i = 0; i < line-1; i++) {
- if (!strcmp(outbuf[i].symbol, "efi_guid_zero"))
- fprintf(symout, "\t.globl %s\n"
- "\t.data\n"
- "\t.balign 1\n"
- "\t.type %s, %%object\n"
- "\t.size %s, %s_end - %s\n",
- "efi_guid_empty", "efi_guid_empty",
- "efi_guid_empty", "efi_guid_empty",
- "efi_guid_empty");
- fprintf(symout, "\t.globl %s\n"
- "\t.data\n"
- "\t.balign 1\n"
- "\t.type %s, %%object\n"
- "\t.size %s, %s_end - %s\n"
- "%s:\n",
- outbuf[i].symbol,
- outbuf[i].symbol,
- outbuf[i].symbol,
- outbuf[i].symbol,
- outbuf[i].symbol,
- outbuf[i].symbol);
- if (!strcmp(outbuf[i].symbol, "efi_guid_zero"))
- fprintf(symout, "efi_guid_empty:\n");
+ fprintf(symout, "#include \n");
+ fprintf(symout, "#include \n");
+ fprintf(symout, """\n\
+#if BYTE_ORDER == BIG_ENDIAN\n\
+#define cpu_to_be32(n) (n)\n\
+#define cpu_to_be16(n) (n)\n\
+#define cpu_to_le32(n) (__bswap_constant_32(n))\n\
+#define cpu_to_le16(n) (__bswap_constant_16(n))\n\
+#else\n\
+#define cpu_to_le32(n) (n)\n\
+#define cpu_to_le16(n) (n)\n\
+#define cpu_to_be32(n) (__bswap_constant_32(n))\n\
+#define cpu_to_be16(n) (__bswap_constant_16(n))\n\
+#endif\n\
+""");
+ for (unsigned int i = 0; i < line-1; i++) {
uint8_t *guid_data = (uint8_t *) &outbuf[i].guid;
- for (unsigned int j = 0; j < sizeof (efi_guid_t); j++)
- fprintf(symout,"\t.byte 0x%02x\n", guid_data[j]);
- fprintf(symout, "%s_end:\n", outbuf[i].symbol);
+ if (!strcmp(outbuf[i].symbol, "efi_guid_zzignore-this-guid"))
+ break;
+
+ if (!strcmp(outbuf[i].symbol, "efi_guid_zero")) {
+ fprintf(symout, "const efi_guid_t\n"
+ "__attribute__((__visibility__ (\"default\")))\n"
+ "efi_guid_empty = {0x0,0x0,0x0,0x0,{0x0,0x0,0x0,0x0,0x0,0x0}};\n\n");
+ }
if (!strcmp(outbuf[i].symbol, "efi_guid_zero")) {
- fprintf(symout, "efi_guid_empty_end:\n");
- fprintf(header, "extern const efi_guid_t efi_guid_empty;\n");
+ fprintf(header, "extern const efi_guid_t efi_guid_empty __attribute__((__visibility__ (\"default\")));\n");
}
- fprintf(header, "extern const efi_guid_t %s;\n", outbuf[i].symbol);
+ fprintf(header, "extern const efi_guid_t %s __attribute__((__visibility__ (\"default\")));\n", outbuf[i].symbol);
+
+ fprintf(symout, "const \n"
+ "__attribute__((__visibility__ (\"default\")))\n"
+ "efi_guid_t %s = {cpu_to_le32(0x%02x%02x%02x%02x),cpu_to_le16(0x%02x%02x),cpu_to_le16(0x%02x%02x),cpu_to_be16(0x%02x%02x),{0x%02x,0x%02x,0x%02x,0x%02x,0x%02x,0x%02x}};\n\n",
+ outbuf[i].symbol,
+ guid_data[3], guid_data[2],
+ guid_data[1], guid_data[0],
+ guid_data[5], guid_data[4],
+ guid_data[7], guid_data[6],
+ guid_data[8], guid_data[9],
+ guid_data[10], guid_data[11],
+ guid_data[12], guid_data[13],
+ guid_data[14], guid_data[15]);
}
fprintf(header, "\n#endif /* EFIVAR_GUIDS_H */\n");
- fprintf(symout, "#if defined(__linux__) && defined(__ELF__)\n.section .note.GNU-stack,\"\",%%progbits\n#endif");
fclose(header);
fclose(symout);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/efivar-0.21/src/ucs2.h new/efivar-0.23/src/ucs2.h
--- old/efivar-0.21/src/ucs2.h 2015-07-13 22:00:06.000000000 +0200
+++ new/efivar-0.23/src/ucs2.h 2016-02-15 20:38:42.000000000 +0100
@@ -9,7 +9,7 @@
ucs2len(const uint16_t * const s, ssize_t limit)
{
ssize_t i;
- for (i = 0; i < (limit >= 0 ? limit : i+1) && s[i] != L'\0'; i++)
+ for (i = 0; i < (limit >= 0 ? limit : i+1) && s[i] != (uint16_t)0; i++)
;
return i;
}
@@ -120,7 +120,7 @@
ssize_t req;
ssize_t i, j;
- if (!utf8 || (!ucs2 && size > 0)) {
+ if (!ucs2 && size > 0) {
errno = EINVAL;
return -1;
}
@@ -156,7 +156,7 @@
ucs2[j] = val;
}
if (terminate)
- ucs2[j++] = L'\0';
+ ucs2[j++] = (uint16_t)0;
return j;
};
++++++ efivar-no-static.patch ++++++
From d084645fdc9bf805b39b0fb3ff7ec315661884be Mon Sep 17 00:00:00 2001
From: Gary Lin
Date: Wed, 9 Mar 2016 12:19:26 +0800
Subject: [PATCH] Remove efivar-static since it requires static libs
Signed-off-by: Gary Lin
---
src/Makefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Makefile b/src/Makefile
index 5fc7887..e1c1ccd 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -8,7 +8,7 @@ include $(TOPDIR)/Make.defaults
LIBTARGETS=libefivar.so libefiboot.so
STATICLIBTARGETS=libefivar.a libefiboot.a
-BINTARGETS=efivar efivar-static
+BINTARGETS=efivar
PCTARGETS=efivar.pc efiboot.pc
TARGETS=$(LIBTARGETS) $(STATICLIBTARGETS) $(BINTARGETS) $(PCTARGETS)
--
2.7.2
++++++ efivar-nvme-no-kernel-header.patch ++++++
From 8910f45c27fadba0904f707e7c40ad80bf828f7e Mon Sep 17 00:00:00 2001
From: Peter Jones
Date: Fri, 19 Feb 2016 18:53:00 -0500
Subject: [PATCH] libefiboot: rework NVME so we get EUI right and don't need
kernel headers
The headers are broken enough on various distros that it's better to
avoid them entirely.
Signed-off-by: Peter Jones
---
src/linux.c | 127 ++++++++++++++++++++++++++++++++++++++++++++++--------------
src/linux.h | 8 ++++
2 files changed, 106 insertions(+), 29 deletions(-)
diff --git a/src/linux.c b/src/linux.c
index 0063476..084e9c2 100644
--- a/src/linux.c
+++ b/src/linux.c
@@ -23,11 +23,6 @@
#include
#include
#include
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)
-#include
-#else
-#include
-#endif
#include
#include
#include
@@ -48,17 +43,6 @@
int
__attribute__((__visibility__ ("hidden")))
-eb_nvme_ns_id(int fd, uint32_t *ns_id)
-{
- uint64_t ret = ioctl(fd, NVME_IOCTL_ID, NULL);
- if ((int)ret < 0)
- return ret;
- *ns_id = (uint32_t)ret;
- return 0;
-}
-
-int
-__attribute__((__visibility__ ("hidden")))
set_disk_and_part_name(struct disk_info *info)
{
char *linkbuf;
@@ -168,6 +152,23 @@ get_partition_number(const char *devpath)
}
static int
+sysfs_test_nvme(const char *buf, ssize_t size)
+{
+ int rc;
+
+ int32_t tosser0;
+ int32_t ctrl_id;
+ int32_t ns_id;
+
+ errno = 0;
+ rc = sscanf(buf, "nvme/nvme%d/nvme%dn%d", &tosser0, &ctrl_id, &ns_id);
+ if (rc < 1)
+ return (errno == 0) ? 0 : -1;
+
+ return 1;
+}
+
+static int
sysfs_test_sata(const char *buf, ssize_t size)
{
if (!strncmp(buf, "ata", MIN(size,3)))
@@ -259,6 +260,69 @@ sysfs_sata_get_port_info(uint32_t print_id, struct disk_info *info)
}
static ssize_t
+sysfs_parse_nvme(uint8_t *buf, ssize_t size, ssize_t *off,
+ const char *pbuf, ssize_t psize, ssize_t *poff,
+ struct disk_info *info)
+{
+ int rc;
+ int psz = 0;
+ char *filebuf = NULL;
+
+ *poff = 0;
+ *off = 0;
+
+ int32_t tosser0;
+ int32_t ctrl_id;
+ int32_t ns_id;
+
+ /* buf is:
+ * nvme/nvme0/nvme0n1
+ */
+ rc = sscanf(pbuf+*poff, "nvme/nvme%d/nvme%dn%d%n", &tosser0,
+ &ctrl_id, &ns_id, &psz);
+ if (rc != 3)
+ return -1;
+ *poff += psz;
+
+ info->nvme_info.ctrl_id = ctrl_id;
+ info->nvme_info.ns_id = ns_id;
+ info->nvme_info.has_eui = 0;
+ info->interface_type = nvme;
+
+ /*
+ * now fish the eui out of sysfs is there is one...
+ */
+ rc = read_sysfs_file(&filebuf,
+ "/sys/class/block/nvme%dn%d/device/eui",
+ ctrl_id, ns_id);
+ if (rc >= 0) {
+ uint8_t eui[8];
+ if (rc < 23) {
+ errno = EINVAL;
+ return -1;
+ }
+ rc = sscanf(filebuf,
+ "%02hhx-%02hhx-%02hhx-%02hhx-"
+ "%02hhx-%02hhx-%02hhx-%02hhx",
+ &eui[0], &eui[1], &eui[2], &eui[3],
+ &eui[4], &eui[5], &eui[6], &eui[7]);
+ if (rc < 8) {
+ errno = EINVAL;
+ return -1;
+ }
+ info->nvme_info.has_eui = 1;
+ memcpy(info->nvme_info.eui, eui, sizeof(eui));
+ }
+
+ *off = efidp_make_nvme(buf, size,
+ info->nvme_info.ns_id,
+ info->nvme_info.has_eui ? info->nvme_info.eui
+ : NULL);
+ return *off;
+}
+
+
+static ssize_t
sysfs_parse_sata(uint8_t *buf, ssize_t size, ssize_t *off,
const char *pbuf, ssize_t psize, ssize_t *poff,
struct disk_info *info)
@@ -665,20 +729,25 @@ make_blockdev_path(uint8_t *buf, ssize_t size, int fd, struct disk_info *info)
loff += tmpoff;
found = 1;
}
+ }
- if (!found) {
- uint32_t ns_id=0;
- int rc = eb_nvme_ns_id(fd, &ns_id);
- if (rc >= 0) {
- sz = efidp_make_nvme(buf+off, size?size-off:0,
- ns_id, NULL);
- if (sz < 0)
- return -1;
-
- info->interface_type = nvme;
- off += sz;
- found = 1;
- }
+ /* /dev/nvme0n1 looks like:
+ * /sys/dev/block/259:0 -> ../../devices/pci0000:00/0000:00:1d.0/0000:05:00.0/nvme/nvme0/nvme0n1
+ */
+ if (!found) {
+ rc = sysfs_test_nvme(linkbuf+loff, PATH_MAX-off);
+ if (rc < 0)
+ return -1;
+ else if (rc > 0) {
+ ssize_t linksz;
+ rc = sysfs_parse_nvme(buf+off, size?size-off:0, &sz,
+ linkbuf+loff, PATH_MAX-off,
+ &linksz, info);
+ if (rc < 0)
+ return -1;
+ loff += linksz;
+ off += sz;
+ found = 1;
}
}
diff --git a/src/linux.h b/src/linux.h
index 5e8d003..539fb23 100644
--- a/src/linux.h
+++ b/src/linux.h
@@ -60,6 +60,13 @@ struct sata_info {
uint32_t ata_pmp;
};
+struct nvme_info {
+ int32_t ctrl_id;
+ int32_t ns_id;
+ int has_eui;
+ uint8_t eui[8];
+};
+
struct disk_info {
int interface_type;
unsigned int controllernum;
@@ -76,6 +83,7 @@ struct disk_info {
struct scsi_info scsi_info;
struct sas_info sas_info;
struct sata_info sata_info;
+ struct nvme_info nvme_info;
};
char *disk_name;
--
2.7.2
++++++ efivar-nvme-rename.patch ++++++
From 3a0ae7189fe96355d64dc2daf91cf85282773c66 Mon Sep 17 00:00:00 2001
From: Mike Gilbert
Date: Thu, 14 Jan 2016 17:02:31 -0500
Subject: [PATCH] Workaround rename of linux/nvme.h
Bug: https://bugs.gentoo.org/571548
---
src/linux.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/linux.c b/src/linux.c
index b618cfd..9388cd3 100644
--- a/src/linux.c
+++ b/src/linux.c
@@ -22,7 +22,12 @@
#include
#include
#include
+#include
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0)
+#include
+#else
#include
+#endif
#include
#include
#include
--
2.7.2