SPUG: Fixing Cygwin broken links
tallpeak at hotmail.com
Thu Jul 21 17:02:25 PDT 2005
perldoc -f stat says "use Fcntl ':mode';" for those constants. Oops. I
didn't do that.
And I didn't use -w. I know, I'm bad.
The expression apparently reduced to true, and it looks at all files under
$ perl -lwe 'use Fcntl ":mode"; $x=S_IFREG; print $x'
$ perl -lwe '$mode=0; print +(($mode & (S_IFREG | S_IFLNK)) == S_IFREG)'
Argument "S_IF^OO" isn't numeric in bitwise and (&) at -e line 1.
Argument "S_IFREG" isn't numeric in numeric eq (==) at -e line 1.
S_IFREG is a string. S_IFREG | S_IFLNK is a bitwise or of two strings.
Okay, I'll try to remember -w even for little "hacks".
This is cleaner (though some warnings about unused variables from stat):
$ cat ./fixlinks.pl
use Fcntl ':mode';
while($filename = <*>)
if (defined $size && $size > 9 && $size < 200 && $mode & S_IFREG )
unless (open FH, "<$filename")
print "Can't open $filename\n";
$firstline = <FH>;
if ($firstline =~ /^\!\<symlink\>(.*)/)
print "ln -sf $1 $filename\n"; #inform the user what
is effectively happening
symlink $1, $filename;
----- Original Message -----
From: "Michael R. Wolf" <MichaelRWolf at att.net>
To: "'Aaron West'" <tallpeak at hotmail.com>; <spug-list at pm.org>
Sent: Thursday, July 21, 2005 12:11 PM
Subject: RE: SPUG: Fixing Cygwin broken links
> What are the S_* constants? How did you get them loaded?
>> if ($size < 200 && (($mode & (S_IFREG | S_IFLNK)) == S_IFREG) )
> A DeMorgan equivalent should be:
> if ($size < 200 && $mode & S_IFREG )
> But that doesn't seem to be saying what you claim that it's doing.
More information about the spug-list