use File::Basename;
use File::Path qw(make_path);
use IO::File;
+use IO::Dir;
use IPC::Open3;
use Fcntl qw(:DEFAULT :flock);
use base 'Exporter';
use URI::Escape;
use Encode;
-use Digest::SHA1;
+use Digest::SHA;
use Text::ParseWords;
use String::ShellQuote;
file_set_contents
file_get_contents
file_read_firstline
+dir_glob_regex
+dir_glob_foreach
split_list
template_replace
safe_print
}
if ($errmsg) {
+ $err =~ s/^usermod:\s*// if $cmdstr =~ m|^(\S+/)?usermod\s|;
die "$errmsg: $err";
} else {
die "command '$cmdstr' failed: $err";
'si' => ['Slovenian', 'sl', 'qwertz/slovene.kmap.gz', 'si', undef],
'se' => ['Swedish', 'sv', 'qwerty/se-latin1.kmap.gz', 'se', 'nodeadkeys'],
#'th' => [],
- #'tr' => [],
+ 'tr' => ['Turkish', 'tr', 'qwerty/trq.kmap.gz', 'tr', undef],
};
my $kvmkeymaparray = [];
my $filename;
# "UPID:$node:$pid:$pstart:$startime:$dtype:$id:$user"
- if ($upid =~ m/^UPID:([A-Za-z][[:alnum:]\-]*[[:alnum:]]+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/) {
+ if ($upid =~ m/^UPID:([a-zA-Z0-9]([a-zA-Z0-9\-]*[a-zA-Z0-9])?):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/) {
$res->{node} = $1;
- $res->{pid} = hex($2);
- $res->{pstart} = hex($3);
- $res->{starttime} = hex($4);
- $res->{type} = $5;
- $res->{id} = $6;
- $res->{user} = $7;
-
- my $subdir = substr($4, 7, 8);
+ $res->{pid} = hex($3);
+ $res->{pstart} = hex($4);
+ $res->{starttime} = hex($5);
+ $res->{type} = $6;
+ $res->{id} = $7;
+ $res->{user} = $8;
+
+ my $subdir = substr($5, 7, 8);
$filename = "$pvetaskdir/$subdir/$upid";
} else {
sub random_ether_addr {
- my $rand = Digest::SHA1::sha1_hex(rand(), time());
+ my $rand = Digest::SHA::sha1_hex(rand(), time());
my $mac = '';
for (my $i = 0; $i < 6; $i++) {
return ($count, $lines);
}
+sub dir_glob_regex {
+ my ($dir, $regex) = @_;
+
+ my $dh = IO::Dir->new ($dir);
+ return wantarray ? () : undef if !$dh;
+
+ while (defined(my $tmp = $dh->read)) {
+ if (my @res = $tmp =~ m/^($regex)$/) {
+ $dh->close;
+ return wantarray ? @res : $tmp;
+ }
+ }
+ $dh->close;
+
+ return wantarray ? () : undef;
+}
+
+sub dir_glob_foreach {
+ my ($dir, $regex, $func) = @_;
+
+ my $dh = IO::Dir->new ($dir);
+ if (defined $dh) {
+ while (defined(my $tmp = $dh->read)) {
+ if (my @res = $tmp =~ m/^($regex)$/) {
+ &$func (@res);
+ }
+ }
+ }
+}
+
1;