88 |
croak("Directory '$dir' does not exits: $!") unless (-d $dir); |
croak("Directory '$dir' does not exits: $!") unless (-d $dir); |
89 |
|
|
90 |
if (-d "$dir/$name") { |
if (-d "$dir/$name") { |
91 |
warn "Warning: Directory '$dir/$name' already exists"; |
carp "Warning: directory '$dir/$name' already exists\n"; |
92 |
} else { |
} else { |
93 |
unless (mkdir "$dir/$name", 0775) { |
unless (mkdir "$dir/$name", 0775) { |
94 |
croak("Could not mkdir '$dir/$name': $!"); |
croak("Could not mkdir '$dir/$name': $!"); |
162 |
my $name = $parm{name} or croak "No name specified"; |
my $name = $parm{name} or croak "No name specified"; |
163 |
my $self = bless {}, ref($type) || $type; |
my $self = bless {}, ref($type) || $type; |
164 |
|
|
165 |
|
croak("Directory '$dir' does not exits: $!") unless (-d $dir); |
166 |
|
if (!-d "$dir/$name") { |
167 |
|
carp "Warning: database '$dir/$name' doesn't exist\n"; |
168 |
|
return; |
169 |
|
} |
170 |
my $mode = (exists $parm{mode})?$parm{mode}:(O_CREAT | O_RDWR); |
my $mode = (exists $parm{mode})?$parm{mode}:(O_CREAT | O_RDWR); |
171 |
$self->{dir} = $dir; # will be overwritten by the thaw below, but we need it now |
$self->{dir} = $dir; # will be overwritten by the thaw below, but we need it now |
172 |
$self->{name} = $name; |
$self->{name} = $name; |
175 |
|
|
176 |
return if (! -d $self->path); |
return if (! -d $self->path); |
177 |
|
|
178 |
if ($mode & O_RDWR) { |
my $flags = DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB; |
179 |
my $flags = DB_CREATE|DB_INIT_MPOOL|DB_INIT_CDB; |
|
180 |
#warn "setting flags for envorinment 'writing'"; |
$env = BerkeleyDB::Env->new( |
|
$env = BerkeleyDB::Env->new( |
|
181 |
-Home => $self->path, |
-Home => $self->path, |
182 |
-Flags => $flags, |
-Flags => $flags, |
183 |
); |
); |
184 |
unless ($env) { |
unless ($env) { |
185 |
confess("Could not create environment in [".$self->path."]: $BerkeleyDB::Error"); |
return if ($parm{mode} & O_RDWR); |
186 |
} |
confess("Could not create environment in [".$self->path."]: $BerkeleyDB::Error"); |
|
} else { |
|
|
# in der Datei neo-lieferung.pl habe ich in Punkt 2.6 darueber |
|
|
# lamentiert, dass der Readonly-User kein Environment bekommt. |
|
|
# Es muesste ein Klacks sein, dafuer einen Schalter |
|
|
# bereitzustellen. Kostet mich aber zu viel Denkzeit. |
|
|
# warn "DEBUG: setting env to NIL"; |
|
|
$env = ""; |
|
187 |
} |
} |
188 |
|
|
189 |
#warn "DEBUG: trying to open the database for _attr"; |
#warn "DEBUG: trying to open the database for _attr"; |
194 |
$env ? (-Env => $env) : (-Flags => DB_RDONLY), |
$env ? (-Env => $env) : (-Flags => DB_RDONLY), |
195 |
); |
); |
196 |
unless (defined($attr)) { |
unless (defined($attr)) { |
197 |
|
return if ($parm{mode} & O_RDWR); |
198 |
croak "Cannot open [$maindbfile] _attr: $BerkeleyDB::Error; mdbf[$maindbfile] env[$env]"; |
croak "Cannot open [$maindbfile] _attr: $BerkeleyDB::Error; mdbf[$maindbfile] env[$env]"; |
199 |
} |
} |
200 |
|
|