*packed_size_var = interface.packed;
*original_size_var = interface.original;
} else {
- copyfile(infp, outfp, size, 0, &crc);
- *packed_size_var = *original_size_var = size;
+ *packed_size_var = *original_size_var =
+ copyfile(infp, outfp, size, 0, &crc);
}
memcpy(hdr_method, "-lh -", 5);
hdr_method[3] = interface.method + '0';
error("Cannot access file \"%s\"", name); /* See cleaning_files, Why? */
return oafp;
}
-
+
directory = is_directory(&stbuf);
#ifdef S_IFLNK
symlink = is_symlink(&stbuf);
/* ------------------------------------------------------------------------ */
void
temporary_to_new_archive_file(new_archive_size)
- long new_archive_size;
+ size_t new_archive_size;
{
- FILE *oafp, *nafp;
+ FILE *oafp, *nafp;
if (!strcmp(new_archive_name, "-")) {
nafp = stdout;
int i;
long old_header;
boolean old_archive_exist;
- long new_archive_size;
+ size_t new_archive_size;
/* exit if no operation */
if (!update_if_newer && cmd_filec == 0) {
new_archive_size = 0; /* avoid compiler warnings `uninitialized' */
if (!noexec) {
+ off_t tmp;
+
write_archive_tail(nafp);
- new_archive_size = ftello(nafp);
+ tmp = ftello(nafp);
+ if (tmp == -1) {
+ warning("ftello(): %s", strerror(errno));
+ new_archive_size = 0;
+ }
+ else
+ new_archive_size = tmp;
+
fclose(nafp);
}
report_archive_name_if_different();
/* copy temporary file to new archive file */
- if (!noexec && (!strcmp(new_archive_name, "-") ||
- rename(temporary_name, new_archive_name) < 0))
- temporary_to_new_archive_file(new_archive_size);
+ if (!noexec) {
+ if (strcmp(new_archive_name, "-") == 0 ||
+ rename(temporary_name, new_archive_name) < 0) {
+
+ temporary_to_new_archive_file(new_archive_size);
+ }
+ }
/* set new archive file mode/group */
set_archive_file_mode();
void
cmd_delete()
{
- FILE *oafp, *nafp;
- long new_archive_size;
+ FILE *oafp, *nafp;
+ size_t new_archive_size;
/* open old archive if exist */
if ((oafp = open_old_archive()) == NULL)
new_archive_size = 0; /* avoid compiler warnings `uninitialized' */
if (!noexec) {
+ off_t tmp;
+
write_archive_tail(nafp);
- new_archive_size = ftello(nafp);
+ tmp = ftello(nafp);
+ if (tmp == -1) {
+ warning("ftello(): %s", strerror(errno));
+ new_archive_size = 0;
+ }
+ else
+ new_archive_size = tmp;
+
fclose(nafp);
}
report_archive_name_if_different();
/* copy temporary file to new archive file */
- if (!noexec && rename(temporary_name, new_archive_name) < 0)
- temporary_to_new_archive_file(new_archive_size);
+ if (!noexec) {
+ if (rename(temporary_name, new_archive_name) < 0)
+ temporary_to_new_archive_file(new_archive_size);
+ }
/* set new archive file mode/group */
set_archive_file_mode();
void decode_start_lz5 P_((void));
/* lhadd.c */
FILE *append_it P_((char *name, FILE *oafp, FILE *nafp));
-void temporary_to_new_archive_file P_((long new_archive_size));
+void temporary_to_new_archive_file P_((size_t new_archive_size));
void cmd_add P_((void));
void cmd_delete P_((void));
/* lharc.c */
unsigned int encode P_((struct interfacing *interface));
unsigned int decode P_((struct interfacing *interface));
/* util.c */
-size_t copyfile P_((FILE *f1, FILE *f2, long size, int text_flg, unsigned int *crcp));
+size_t copyfile P_((FILE *f1, FILE *f2, size_t size, int text_flg, unsigned int *crcp));
int encode_stored_crc P_((FILE *ifp, FILE *ofp, size_t size, size_t *original_size_var, size_t *write_size_var));
boolean archive_is_msdos_sfx1 P_((char *name));
int xsnprintf P_((char *dest, size_t size, char *fmt, ...));
copyfile(f1, f2, size, text_flg, crcp) /* return: size of source file */
FILE *f1;
FILE *f2;
- long size;
+ size_t size;
int text_flg; /* 0: binary, 1: read text, 2: write text */
unsigned int *crcp;
{
if (fread(buf, 1, xsize, f1) != xsize) {
fatal_error("file read error");
}
- size -= xsize;
+ if (size < xsize)
+ size = 0;
+ else
+ size -= xsize;
}
+
/* write */
if (f2) {
if (text_flg & 2) {
}
}
}
+
/* calculate crc */
if (crcp) {
*crcp = calccrc(*crcp, buf, xsize);