summaryrefslogtreecommitdiffstats
path: root/common/scripts/Vareqval.pm
blob: 110ad4ecb5e57aa3264703094c83ef68d1793ad6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/usr/bin/perl -w

# Author Philippe Hétroy, phetroy@mandrakesoft.com
# $Id: Vareqval.pm,v 1.3 2002-09-03 15:11:43 adesmons Exp $

# Module for loding and committing informations in a VAR = value file type

package Vareqval;
use lib('./');
use strict;
use Data::Dumper;


# Get all useful content of the config file
# Return a hash containg the key and the value
# ATTENTION : in the conf file, an empty value is returnes as a spaced value (mandatory because of XML compatibility)
sub get {
    my $self = shift;
    my $file = shift;
    my %l;
    local *F; open F, $file or return;
    local $_;

    while (<F>) {

        my ($v, $val, $val2) =
          /^\s*				# leading space
           (\w+)\s*=\s*			# variable
           (
               "(.*)"			# double-quoted text
             | '(.*)'			# single-quoted text
	     | [^'"\s]*			# normal text
           )
           \s*$				# end of line
          /x;
         no warnings;
	 next if (!defined $v || $v eq "");
         $l{$v} = defined $val2 ? $val2 : $val;
    }

    %l;
}

# Commits changes in conf files and ifconfig
sub commit {
    my $self = shift;
    my ($file, $hash) = @_;
    local *F;

    my $output = "";
    if (open(F, $file)) {
	local $_;

	while (<F>) {
	    my ($pre, $key, $eq, $val, $rest) = /(^\s*)(\w+)(\s*=\s*"*'*)([^'"\s]*)(.*)/x;

            if (!defined $key) {
                $output .= $_;
                next;
            };
            next if (!exists $hash->{$key});    #Elt has been removed
            no warnings;
            $val = $hash->{$key};
            delete $hash->{$key};
            $output .= defined $val ? $pre . $key . $eq . $val .  $rest . "\n" : $pre . $key . $eq . $val .  $rest;
#            $output .= $pre . $key . $eq . $val .  $rest . "\n";
        }
            #appending added parameters
            foreach (keys %$hash) {
                $output .= $_ . "=" . $hash->{$_} . "\n";
            }

    } else {    #the file does not exist
	print STDERR "File $file will be created\n";
	foreach (keys %$hash) {
	    $output .= defined $hash->{$_} ? $_ . "=" . $hash->{$_} . "\n" : $_ . "=\n";
	}
    }

#print $output;
#print "\n------------------\n";

     # outputing the new conf
     open(F, "> $file") or return;
     print F $output;
     close(F);
}

1;