Yeah, you are reminding me that I rolled my own for this package. The
reason is that my amanda server is 2.5.0 still which seems to be
incompatible with 2.5.1, yet i needed a fix that went into 2.5.1 for
gnutar's listed-incremental files.
The specific patch I needed to add your your 2.5.0p2-1 package just in
case you are interested:
--- amanda-2.5.0p2.orig/client-src/sendsize.c
+++ amanda-2.5.0p2/client-src/sendsize.c
@@ -1454,6 +1454,9 @@
char *file_exclude = NULL;
char *file_include = NULL;
times_t start_time;
+ int infd, outfd;
+ ssize_t nb;
+ char buf[32768];
if(options->exclude_file) nb_exclude += options->exclude_file->nb_element;
if(options->exclude_list) nb_exclude += options->exclude_list->nb_element;
@@ -1497,7 +1500,8 @@
* be true for a level 0), arrange to read from /dev/null.
*/
baselevel = level;
- while (in == NULL) {
+ infd = -1;
+ while (infd == -1) {
if (--baselevel >= 0) {
snprintf(number, sizeof(number), "%d", baselevel);
inputname = newvstralloc(inputname,
@@ -1505,7 +1509,7 @@
} else {
inputname = newstralloc(inputname, "/dev/null");
}
- if ((in = fopen(inputname, "r")) == NULL) {
+ if ((infd = open(inputname, O_RDONLY)) == -1) {
int save_errno = errno;
dbprintf(("%s: gnutar: error opening %s: %s\n",
@@ -1519,40 +1523,36 @@
/*
* Copy the previous listed incremental file to the new one.
*/
- if ((out = fopen(incrname, "w")) == NULL) {
+ if ((outfd = open(incrname, O_WRONLY|O_CREAT, 0600)) == -1) {
dbprintf(("%s: opening %s: %s\n",
debug_prefix(NULL), incrname, strerror(errno)));
goto common_exit;
}
- for (; (line = agets(in)) != NULL; free(line)) {
- if (fputs(line, out) == EOF || putc('\n', out) == EOF) {
+ while ((nb = read(infd, &buf, SIZEOF(buf))) > 0) {
+ if (fullwrite(outfd, &buf, (size_t)nb) < nb) {
dbprintf(("%s: writing to %s: %s\n",
debug_prefix(NULL), incrname, strerror(errno)));
goto common_exit;
}
}
- amfree(line);
-
- if (ferror(in)) {
+
+ if (nb < 0) {
dbprintf(("%s: reading from %s: %s\n",
debug_prefix(NULL), inputname, strerror(errno)));
goto common_exit;
}
- if (fclose(in) == EOF) {
+
+ if (close(infd) != 0) {
dbprintf(("%s: closing %s: %s\n",
debug_prefix(NULL), inputname, strerror(errno)));
- in = NULL;
goto common_exit;
}
- in = NULL;
- if (fclose(out) == EOF) {
+ if (close(outfd) != 0) {
dbprintf(("%s: closing %s: %s\n",
debug_prefix(NULL), incrname, strerror(errno)));
- out = NULL;
goto common_exit;
}
- out = NULL;
amfree(inputname);
amfree(basename);
--- amanda-2.5.0p2.orig/client-src/sendbackup-gnutar.c
+++ amanda-2.5.0p2/client-src/sendbackup-gnutar.c
@@ -147,6 +147,10 @@
char *encryptopt = skip_argument;
char *quoted;
char *qdisk;
+ int infd, outfd;
+ ssize_t nb;
+ char buf[32768];
+
error_pn = stralloc2(get_pname(), "-smbclient");
@@ -240,7 +246,8 @@
* be true for a level 0), arrange to read from /dev/null.
*/
baselevel = level;
- while (in == NULL) {
+ infd = -1;
+ while (infd == -1) {
if (--baselevel >= 0) {
snprintf(number, sizeof(number), "%d", baselevel);
inputname = newvstralloc(inputname,
@@ -248,51 +255,61 @@
} else {
inputname = newstralloc(inputname, "/dev/null");
}
- if ((in = fopen(inputname, "r")) == NULL) {
+ if ((infd = open(inputname, O_RDONLY)) == -1) {
int save_errno = errno;
+ char *qname = quote_string(inputname);
dbprintf(("%s: error opening %s: %s\n",
debug_prefix_time("-gnutar"),
- inputname,
+ qname,
strerror(save_errno)));
if (baselevel < 0) {
error("error [opening %s: %s]", inputname,
strerror(save_errno));
+ /*NOTREACHED*/
}
+ amfree(qname);
}
}
/*
* Copy the previous listed incremental file to the new one.
*/
- if ((out = fopen(incrname, "w")) == NULL) {
+ if ((outfd = open(incrname, O_WRONLY|O_CREAT, 0600)) == -1) {
error("error [opening %s: %s]", incrname, strerror(errno));
+ /*NOTREACHED*/
}
-
- for (; (line = agets(in)) != NULL; free(line)) {
- if(fputs(line, out) == EOF || putc('\n', out) == EOF) {
- error("error [writing to %s: %s]", incrname, strerror(errno));
+ while ((nb = read(infd, &buf, SIZEOF(buf))) > 0) {
+ if (fullwrite(outfd, &buf, (size_t)nb) < nb) {
+ error("error [writing to '%s': %s]", incrname,
+ strerror(errno));
+ /*NOTREACHED*/
}
}
- amfree(line);
-
- if (ferror(in)) {
- error("error [reading from %s: %s]", inputname, strerror(errno));
- }
- if (fclose(in) == EOF) {
- error("error [closing %s: %s]", inputname, strerror(errno));
+
+ if (nb < 0) {
+ error("error [reading from '%s': %s]", inputname, strerror(errno));
+ /*NOTREACHED*/
}
- in = NULL;
- if (fclose(out) == EOF) {
- error("error [closing %s: %s]", incrname, strerror(errno));
+
+ if (close(infd) != 0) {
+ error("error [closing '%s': %s]", inputname, strerror(errno));
+ /*NOTREACHED*/
+ }
+ if (close(outfd) != 0) {
+ error("error [closing '%s': %s]", incrname, strerror(errno));
+ /*NOTREACHED*/
}
- out = NULL;
-
+
dbprintf(("%s: doing level %d dump as listed-incremental",
debug_prefix_time("-gnutar"), level));
if(baselevel >= 0) {
- dbprintf((" from %s", inputname));
- }
- dbprintf((" to %s\n", incrname));
+ quoted = quote_string(inputname);
+ dbprintf((" from '%s'", quoted));
+ amfree(quoted);
+ }
+ quoted = quote_string(incrname);
+ dbprintf((" to '%s'\n", quoted));
+ amfree(quoted);
amfree(inputname);
amfree(basename);
}
--
[apport] apport-gtk crashed with TypeError in thread_collect_info()
https://bugs.launchpad.net/bugs/98961
You received this bug notification because you are a member of Ubuntu
Bugs, which is the bug contact for Ubuntu.
--
ubuntu-bugs mailing list
[EMAIL PROTECTED]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs