]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/findlib/create_file.c
Tweak version date
[bacula/bacula] / bacula / src / findlib / create_file.c
index 4a512c4e992b8635fe71acc5184d2091ba55d467..b283af3cbfcb7334caa5a62a60a700a4cb1bcae6 100644 (file)
@@ -1,12 +1,12 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2011 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    This program is Free Software; you can redistribute it and/or
-   modify it under the terms of version two of the GNU General Public
+   modify it under the terms of version three of the GNU Affero General Public
    License as published by the Free Software Foundation and included
    in the file LICENSE.
 
@@ -15,7 +15,7 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
+   You should have received a copy of the GNU Affero General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
@@ -71,7 +71,8 @@ static int path_already_seen(JCR *jcr, char *path, int pnl);
  */
 int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
 {
-   mode_t new_mode, parent_mode, mode;
+   mode_t new_mode, parent_mode;
+   int flags;
    uid_t uid;
    gid_t gid;
    int pnl;
@@ -133,6 +134,10 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
          break;
 
       case REPLACE_NEVER:
+         /* Set attributes if we created this directory */
+         if (attr->type == FT_DIREND && path_list_lookup(jcr, attr->ofname)) {
+            break;
+         }
          Qmsg(jcr, M_SKIPPED, 0, _("File skipped. Already exists: %s\n"), attr->ofname);
          return CF_SKIP;
 
@@ -205,9 +210,9 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
       case FT_REGE:
       case FT_REG:
          Dmsg1(100, "Create=%s\n", attr->ofname);
-         mode =  O_WRONLY | O_CREAT | O_TRUNC | O_BINARY; /*  O_NOFOLLOW; */
+         flags =  O_WRONLY | O_CREAT | O_TRUNC | O_BINARY; /*  O_NOFOLLOW; */
          if (IS_CTG(attr->statp.st_mode)) {
-            mode |= O_CTG;               /* set contiguous bit if needed */
+            flags |= O_CTG;              /* set contiguous bit if needed */
          }
          if (is_bopen(bfd)) {
             Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid);
@@ -215,7 +220,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
          }
       
 
-         if ((bopen(bfd, attr->ofname, mode, S_IRUSR | S_IWUSR)) < 0) {
+         if ((bopen(bfd, attr->ofname, flags, S_IRUSR | S_IWUSR)) < 0) {
             berrno be;
             be.set_errno(bfd->berrno);
             Qmsg2(jcr, M_ERROR, 0, _("Could not create %s: ERR=%s\n"),
@@ -225,7 +230,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
          }
          return CF_EXTRACT;
 
-#ifndef HAVE_WIN32  // none of these exists on MS Windows
+#ifndef HAVE_WIN32  // none of these exist in MS Windows
       case FT_RAW:                    /* Bacula raw device e.g. /dev/sda1 */
       case FT_FIFO:                   /* Bacula fifo to save data */
       case FT_SPEC:
@@ -265,7 +270,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
          if (attr->type == FT_RAW || attr->type == FT_FIFO) {
             btimer_t *tid;
             Dmsg1(400, "FT_RAW|FT_FIFO %s\n", attr->ofname);
-            mode =  O_WRONLY | O_BINARY;
+            flags =  O_WRONLY | O_BINARY;
             /* Timeout open() in 60 seconds */
             if (attr->type == FT_FIFO) {
                Dmsg0(400, "Set FIFO timer\n");
@@ -276,8 +281,8 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
             if (is_bopen(bfd)) {
                Qmsg1(jcr, M_ERROR, 0, _("bpkt already open fid=%d\n"), bfd->fid);
             }
-            Dmsg2(400, "open %s mode=0x%x\n", attr->ofname, mode);
-            if ((bopen(bfd, attr->ofname, mode, 0)) < 0) {
+            Dmsg2(400, "open %s flags=0x%x\n", attr->ofname, flags);
+            if ((bopen(bfd, attr->ofname, flags, 0)) < 0) {
                berrno be;
                be.set_errno(bfd->berrno);
                Qmsg2(jcr, M_ERROR, 0, _("Could not open %s: ERR=%s\n"),
@@ -354,6 +359,7 @@ int create_file(JCR *jcr, ATTR *attr, BFILE *bfd, int replace)
       } /* End inner switch */
 
    case FT_REPARSE:
+   case FT_JUNCTION:
       bfd->reparse_point = true;
       /* Fall through wanted */
    case FT_DIRBEGIN: