Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 464198
Collapse All | Expand All

(-)a/ecleankernel/cli.py (-1 / +1 lines)
Lines 126-132 def main(argv): Link Here
126
126
127
		if opts.listkern:
127
		if opts.listkern:
128
			for k in kernels:
128
			for k in kernels:
129
				print('%s:' % k.version)
129
				print('%s [%s]:' % (k.version, k.real_kv))
130
				for key in k.parts:
130
				for key in k.parts:
131
					val = getattr(k, key)
131
					val = getattr(k, key)
132
					if val is not None:
132
					if val is not None:
(-)a/ecleankernel/kernel.py (-14 / +19 lines)
Lines 84-89 class Kernel(object): Link Here
84
			'modules', 'build')
84
			'modules', 'build')
85
85
86
	@property
86
	@property
87
	def real_kv(self):
88
		""" Obtain the KV from the kernel, as used by it. """
89
		vmlinuz = self.vmlinuz
90
		if vmlinuz is None:
91
			return None
92
93
		f = open(vmlinuz, 'rb')
94
		f.seek(0x200)
95
		buf = f.read(0x10)
96
		if buf[2:6] != b'HdrS':
97
			raise NotImplementedError('Invalid magic for kernel file %s (!= HdrS)'
98
					% path)
99
		offset = struct.unpack_from('H', buf, 0x0e)[0]
100
		f.seek(offset - 0x10, 1)
101
		buf = f.read(0x100) # XXX
102
		return str(buf.split(b' ', 1)[0])
103
104
	@property
87
	def mtime(self):
105
	def mtime(self):
88
		# prefer vmlinuz, fallback to anything
106
		# prefer vmlinuz, fallback to anything
89
		# XXX: or maybe max()? min()?
107
		# XXX: or maybe max()? min()?
Lines 145-162 class KernelDict(defaultdict): Link Here
145
	def __repr__(self):
163
	def __repr__(self):
146
		return 'KernelDict(%s)' % ','.join(['\n\t%s' % repr(x) for x in self.values()])
164
		return 'KernelDict(%s)' % ','.join(['\n\t%s' % repr(x) for x in self.values()])
147
165
148
def get_real_kv(path):
149
	f = open(path, 'rb')
150
	f.seek(0x200)
151
	buf = f.read(0x10)
152
	if buf[2:6] != b'HdrS':
153
		raise NotImplementedError('Invalid magic for kernel file %s (!= HdrS)'
154
				% path)
155
	offset = struct.unpack_from('H', buf, 0x0e)[0]
156
	f.seek(offset - 0x10, 1)
157
	buf = f.read(0x100) # XXX
158
	return str(buf.split(b' ', 1)[0])
159
160
def find_kernels(exclusions = ()):
166
def find_kernels(exclusions = ()):
161
	""" Find all files and directories related to installed kernels. """
167
	""" Find all files and directories related to installed kernels. """
162
168
Lines 204-210 def find_kernels(exclusions = ()): Link Here
204
					if newk.build:
210
					if newk.build:
205
						kernels['%s.old' % kv].build = builddir
211
						kernels['%s.old' % kv].build = builddir
206
			if cat == 'vmlinuz':
212
			if cat == 'vmlinuz':
207
				realkv = get_real_kv(path)
213
				realkv = newk.real_kv
208
				moduledir = os.path.join('/lib/modules', realkv)
214
				moduledir = os.path.join('/lib/modules', realkv)
209
				builddir = paths[os.path.join(moduledir, 'build')]
215
				builddir = paths[os.path.join(moduledir, 'build')]
210
				if 'modules' not in exclusions and os.path.isdir(moduledir):
216
				if 'modules' not in exclusions and os.path.isdir(moduledir):
211
- 

Return to bug 464198