/*
* Amanda, The Advanced Maryland Automatic Network Disk Archiver
* Copyright (c) 1999 University of Maryland at College Park
+ * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved.
* All Rights Reserved.
*
* Permission to use, copy, modify, distribute, and sell this software and its
{
int infd, outfd;
int save_errno;
- size_t nb;
+ ssize_t nb;
char buf[32768];
char *quoted;
}
while((nb=read(infd, &buf, SIZEOF(buf))) > 0) {
- if(full_write(outfd,&buf,nb) < nb) {
+ if(full_write(outfd,&buf,nb) < (size_t)nb) {
save_errno = errno;
quoted = quote_string(dst);
*errmsg = vstrallocf(_("Error writing to '%s': %s"),
out = fdopen(outpipe[0],"r");
err = fdopen(errpipe[0],"r");
- output_string = agets(out);
- if (!output_string)
- output_string = agets(err);
+ if (out) {
+ output_string = agets(out);
+ fclose(out);
+ }
- fclose(out);
- fclose(err);
+ if (err) {
+ if (!output_string)
+ output_string = agets(err);
+ fclose(err);
+ }
waitpid(pid, NULL, 0);
return output_string;
}
+gboolean
+make_amanda_tmpdir(void)
+{
+ struct stat stat_buf;
+
+ if (stat(AMANDA_TMPDIR, &stat_buf) != 0) {
+ if (errno != ENOENT) {
+ g_debug("Error doing a stat of AMANDA_TMPDIR (%s): %s", AMANDA_TMPDIR, strerror(errno));
+ return FALSE;
+ }
+ /* create it */
+ if (mkdir(AMANDA_TMPDIR,0700) != 0) {
+ g_debug("Error mkdir of AMANDA_TMPDIR (%s): %s", AMANDA_TMPDIR, strerror(errno));
+ return FALSE;
+ }
+ if (chown(AMANDA_TMPDIR, (int)get_client_uid(), (int)get_client_gid()) < 0) {
+ g_debug("Error chown of AMANDA_TMPDIR (%s): %s", AMANDA_TMPDIR, strerror(errno));
+ return FALSE;
+ }
+ return TRUE;
+ } else {
+ /* check permission */
+ return TRUE;
+ }
+}