#!/usr/bin/perl -w # Copyright (C) 2002,2003 Mandrakesoft # # Author: Philippe Hetroy, phetroy@mandrakesoft.com # # $Id: Varspaceval.pm,v 1.5 2004-01-22 20:24:48 tvignaud Exp $ # Module for loding and committing informations in a VAR = value file type package MDK::Wizard::Varspaceval; #use lib('./'); use strict; use Data::Dumper; use MDK::Common; # Get all useful content of the config file # Return a hash containg the key and the value # WARNING : in the conf file, an empty value is returnes as a spaced value (mandatory because of XML compatibility) sub get { my ($_self, $file) = @_; my %l; foreach (cat_($file)) { my ($v, $val, $val2) = /^\s* # leading space (\w+)\s* # variable ( "(.*)" # double-quoted text | '(.*)' # single-quoted text | [^'"\s]* # normal text ) \s*$ # end of line /x; no warnings; $l{$v} = defined $val2 ? $val2 : $val; } %l; } # Commits changes in conf files and ifconfig sub commit { my ($_self, $file, $hash) = @_; my $output = ""; if (-r $file) { foreach (cat_($file)) { my ($pre, $key, $eq, $val, $rest) = /(^\s*)(\w+)(\s*"*'*)([^'"\s]*)(.*)/x; if (!defined $key) { $output .= $_; next; } next if !exists $hash->{$key}; #Elt has been removed no warnings; $val = delete $hash->{$key}; my $out_val = $pre . $key . $eq . $val . $rest; $output .= defined $val ? $out_val . "\n" : $out_val; } #appending added parameters foreach (keys %$hash) { $output .= $_ . " " . $hash->{$_} . "\n"; } } else { #the file does not exist print STDERR "File $file will be created\n"; # FIXME: why "=" here but " " just above? foreach (keys %$hash) { $output .= $_ . "=" . $hash->{$_} . "\n"; } } # outputing the new conf output($file, $output); } 1;