2 # $Id: errorlib.in,v 1.3 1999/12/01 18:04:01 gecko Exp $
4 sub F_SETLK { 6; } sub F_WRLCK{ 1; }
5 $flockstruct= 'sslll'; # And there ought to be something for this too.
7 sub unlockreadbugmerge {
9 &unfilelock if $rv >= 2;
10 &unfilelock if $rv >= 1;
13 sub lockreadbugmerge {
15 if (!&lockreadbug($lref)) { return 0; }
16 if (!length($s_mergedwith)) { return 1; }
18 &filelock('lock/merge');
19 if (!&lockreadbug($lref)) { &unfilelock; return 0; }
25 &filelock("lock/$lref");
26 if (!open(S,"db/$lref.status")) { &unfilelock; return 0; }
27 chop($s_originator= <S>);
29 chop($s_subject= <S>);
31 chop($s_package= <S>);
32 chop($s_keywords= <S>);
34 chop($s_forwarded= <S>);
35 chop($s_mergedwith= <S>);
36 chop($s_severity= <S>);
38 $s_severity = 'normal' if $s_severity eq '';
43 # NB - NOT COMPATIBLE WITH `with-lock'
44 local ($lockfile,$flockpushno,$evalstring,$count,$errors,@s1,@s2) = @_;
45 $flockpushno= $#filelocks+1;
46 $count= 10; $errors= '';
49 open(FLOCK${flockpushno},\"> \$lockfile\") || die \"open: \$!\";
50 \$flockwant= pack(\$flockstruct,&F_WRLCK,0,0,1,0);".
52 fcntl(FLOCK$flockpushno,&F_SETLK,\$flockwant) || die \"setlk: \$!\";" : "
53 \$z= syscall(&SYS_fcntl,fileno(FLOCK$flockpushno),&F_SETLK,\$flockwant) < 0
54 && die \"syscall fcntl setlk: \$!\";") ."
55 (\@s1= lstat(\$lockfile)) || die \"lstat: \$!\";
56 (\@s2= stat(FLOCK$flockpushno)) || die \"fstat: \$!\";
57 join(',',\@s1) eq join(',',\@s2) || die \"file switched\";
60 last if eval $evalstring;
62 eval "close(FLOCK$flockpushno);";
65 &quit("failed to get lock on file $lockfile: $errors // $evalstring");
69 push(@cleanups,'unfilelock');
70 push(@filelocks,$lockfile);
74 local ($lockfile) = pop(@filelocks);
76 eval 'close(FLOCK'.($#filelocks+1).');' || warn "failed to close lock file: $!";
77 unlink($lockfile) || warn "failed to remove lock file: $!";
81 print DEBUG "quitting >$_[0]<\n";
83 while ($u= $cleanups[$#cleanups]) { &$u; }
87 %saniarray= ('<','lt', '>','gt', '&','amp', '"','quot');
92 while ($in =~ m/[<>&"]/) {
93 $out.= $`. '&'. $saniarray{$&}. ';';
100 @severities= @gSeverityList;
101 @showseverities= @severities;
102 grep ($_= $_ eq '' ? $gDefaultSeverity : $_, @showseverities);
103 @strongseverities= @gStrongSeverities;
104 %displayshowseverities= %gSeverityDisplay;