version 1.6, 2006/06/19 09:35:08
|
version 1.9, 2006/06/27 14:49:29
|
Line 40 my $loncapa_max_wait_time = 13;
|
Line 40 my $loncapa_max_wait_time = 13;
|
|
|
require Exporter; |
require Exporter; |
our @ISA = qw (Exporter); |
our @ISA = qw (Exporter); |
our @EXPORT = qw(&add_get_param &escape &unescape &tie_domain_hash &untie_domain_hash &tie_user_hash &untie_user_hash &propath); |
our @EXPORT = qw(&escape_LaTeX &add_get_param &escape &unescape &tie_domain_hash &untie_domain_hash &tie_user_hash &untie_user_hash &propath); |
my %perlvar; |
my %perlvar; |
|
|
|
# Escape a LaTeX string of special characters that according to LaTeX line by line |
|
# pg 9 are: # $ % & \ ^ _ { } ~ These are escaped by prepending a \ |
|
# |
|
sub escape_LaTeX { |
|
my ($string) = @_; |
|
$string =~ s/[\#\$\%\&\\^_{}]/\\$&/g; |
|
return $string; |
|
} |
|
|
|
|
# Inputs are a url, and a hash ref of |
# Inputs are a url, and a hash ref of |
# form name => value pairs |
# form name => value pairs |
# takes care of properly adding the form name elements and values to the |
# takes care of properly adding the form name elements and values to the |
Line 173 sub untie_user_hash {
|
Line 183 sub untie_user_hash {
|
sub locking_hash_tie { |
sub locking_hash_tie { |
my ($filename,$how)=@_; |
my ($filename,$how)=@_; |
my ($file_prefix,$namespace)=&db_filename_parts($filename); |
my ($file_prefix,$namespace)=&db_filename_parts($filename); |
unless ($namespace) { return undef; } |
if ($namespace eq '') { return undef; } |
return &_locking_hash_tie($file_prefix,$namespace,$how); |
return &_locking_hash_tie($file_prefix,$namespace,$how); |
} |
} |
|
|
Line 184 sub locking_hash_untie {
|
Line 194 sub locking_hash_untie {
|
sub db_filename_parts { |
sub db_filename_parts { |
my ($filename)=@_; |
my ($filename)=@_; |
my ($file_path,$namespace)=($filename=~/^(.*)\/([^\/]+)\.db$/); |
my ($file_path,$namespace)=($filename=~/^(.*)\/([^\/]+)\.db$/); |
unless ($namespace) { return undef; } |
if ($namespace eq '') { return undef; } |
return ($file_path.'/'.$namespace,$namespace); |
return ($file_path.'/'.$namespace,$namespace); |
} |
} |
|
|
Line 221 sub _do_hash_untie {
|
Line 231 sub _do_hash_untie {
|
|
|
sub _locking_hash_tie { |
sub _locking_hash_tie { |
my ($file_prefix,$namespace,$how,$loghead,$what) = @_; |
my ($file_prefix,$namespace,$how,$loghead,$what) = @_; |
|
if (defined($sym)) { |
|
die('Nested locking attempted, this is unsupportted'); |
|
} |
|
|
my $lock_type=LOCK_SH; |
my $lock_type=LOCK_SH; |
# Are we reading or writing? |
# Are we reading or writing? |
if ($how eq &GDBM_READER()) { |
if ($how eq &GDBM_READER()) { |
Line 238 sub _do_hash_untie {
|
Line 252 sub _do_hash_untie {
|
open($sym,">>$file_prefix.db.lock"); |
open($sym,">>$file_prefix.db.lock"); |
} |
} |
# Do a shared lock |
# Do a shared lock |
if (!&flock_sym(LOCK_SH)) { return undef; } |
if (!&flock_sym(LOCK_SH)) { |
|
return undef; |
|
} |
# If this is compressed, we will actually need an exclusive lock |
# If this is compressed, we will actually need an exclusive lock |
if (-e "$file_prefix.db.gz") { |
if (-e "$file_prefix.db.gz") { |
if (!&flock_sym(LOCK_EX)) { return undef; } |
if (!&flock_sym(LOCK_EX)) { |
|
return undef; |
|
} |
} |
} |
} elsif ($how eq &GDBM_WRCREAT()) { |
} elsif ($how eq &GDBM_WRCREAT()) { |
# We are writing |
# We are writing |
open($sym,">>$file_prefix.db.lock"); |
open($sym,">>$file_prefix.db.lock"); |
# Writing needs exclusive lock |
# Writing needs exclusive lock |
if (!&flock_sym(LOCK_EX)) { return undef; } |
if (!&flock_sym(LOCK_EX)) { |
|
return undef; |
|
} |
} else { |
} else { |
die("Unknown method $how for $file_prefix"); |
die("Unknown method $how for $file_prefix"); |
} |
} |