diff --git a/mlocatedb-dump/mlocatedb-dump.rb b/mlocatedb-dump/mlocatedb-dump.rb new file mode 100755 index 0000000..9aa42a2 --- /dev/null +++ b/mlocatedb-dump/mlocatedb-dump.rb @@ -0,0 +1,98 @@ +#!/usr/bin/env ruby + +# $Id$ +# $URL$ + +# Parser voor mlocate.db bestanden. Toont een filelisting van alle bestanden +# uit de database. + +# Zie ook: http://linux.die.net/man/5/mlocate.db + +# Geen argumenten. Probeert gewoon een bestand met de naam 'mlocate.db' +# in de huidige dir te openen + +def arr2long(arr) + return (arr[0]<<24) + (arr[1]<<16) + (arr[2]<<8) + arr[3] +end + +def arr2string(arr) + string = "" + (0...arr.length).step(2){|i| + string += ((arr[i]<<8) + (arr[i+1])).chr + } + return string +end + + +fh = File.new("mlocate.db", "r") + +magic_number=fh.read(8) +if magic_number == "\000mlocate" +# puts "mlocate database found" +else + puts "Not an mlocate database" + exit +end + +configuration_block_size=arr2long(fh.read(4)) +#puts "config block #{configuration_block_size}" + +file_format_version=fh.read(1).to_i +#puts "FF vers #{file_format_version}" + +require_visibility=fh.read(1).to_i +#puts "require visibility #{require_visibility}" + +# get rid of padding +fh.read(2) + +# +dbroot='' +while (b=fh.read(1)) != "\000" + dbroot += b +end + +#puts "DB root: #{dbroot}" + +# skip configuration, we don't care much +bla = fh.read(configuration_block_size) +#p bla + +# skip dir header. Blijkbaar is die toch echt 2 keer 8 bytes +fh.read(16) + +curdir='' +while (b=fh.read(1)) != "\000" + curdir += b +end +puts curdir +if curdir == '/' + curdir = '' +end + +while true + type = fh.read(1) + case type + when "\000" then + file='' + while (b=fh.read(1)) != "\000" + file += b + end + puts "#{curdir}/#{file}" + when "\001" then + subdir='' + while (b=fh.read(1)) != "\000" + subdir += b + end +# puts "#{curdir}/#{subdir}/" + when "\002" then + # dan komt er vast een nieuwe + fh.read(16) + + curdir='' + while (b=fh.read(1)) != "\000" + curdir += b + end + puts "#{curdir}/" + end +end