Browse Source

Git.pm: Remove PerlIO usage from Git.xs

PerlIO_*() is not portable before 5.7.3, according to ppport.h, and it's
more clear what is going on when we do it in the Perl part of the Git module
anyway.

Signed-off-by: Petr Baudis <pasky@suse.cz>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Petr Baudis 19 years ago committed by Junio C Hamano
parent
commit
e6634ac984
  1. 14
      perl/Git.pm
  2. 56
      perl/Git.xs

14
perl/Git.pm

@ -511,7 +511,19 @@ are involved. @@ -511,7 +511,19 @@ are involved.

=cut

# Implemented in Git.xs.
sub hash_object {
my ($self, $type, $file) = _maybe_self(@_);

# hash_object_* implemented in Git.xs.

if (ref($file) eq 'GLOB') {
my $hash = hash_object_pipe($type, fileno($file));
close $file;
return $hash;
} else {
hash_object_file($type, $file);
}
}




56
perl/Git.xs

@ -104,42 +104,36 @@ CODE: @@ -104,42 +104,36 @@ CODE:
}

char *
xs_hash_object(type, file)
xs_hash_object_pipe(type, fd)
char *type;
SV *file;
int fd;
CODE:
{
unsigned char sha1[20];

if (SvTYPE(file) == SVt_RV)
file = SvRV(file);

if (SvTYPE(file) == SVt_PVGV) {
/* Filehandle */
PerlIO *pio;

pio = IoIFP(sv_2io(file));
if (!pio)
croak("You passed me something weird - a dir glob?");
/* XXX: I just hope PerlIO didn't read anything from it yet.
* --pasky */
if (index_pipe(sha1, PerlIO_fileno(pio), type, 0))
croak("Unable to hash given filehandle");
/* Avoid any nasty surprises. */
PerlIO_close(pio);

} else {
/* String */
char *path = SvPV_nolen(file);
int fd = open(path, O_RDONLY);
struct stat st;

if (fd < 0 ||
fstat(fd, &st) < 0 ||
index_fd(sha1, fd, &st, 0, type))
croak("Unable to hash %s", path);
close(fd);
}
if (index_pipe(sha1, fd, type, 0))
croak("Unable to hash given filehandle");
RETVAL = sha1_to_hex(sha1);
}
OUTPUT:
RETVAL

char *
xs_hash_object_file(type, path)
char *type;
char *path;
CODE:
{
unsigned char sha1[20];
int fd = open(path, O_RDONLY);
struct stat st;

if (fd < 0 ||
fstat(fd, &st) < 0 ||
index_fd(sha1, fd, &st, 0, type))
croak("Unable to hash %s", path);
close(fd);

RETVAL = sha1_to_hex(sha1);
}
OUTPUT:

Loading…
Cancel
Save