]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
- add mode argument to sat_xfopen* functions
authorMichael Schroeder <mls@suse.de>
Tue, 8 Mar 2011 09:20:54 +0000 (10:20 +0100)
committerMichael Schroeder <mls@suse.de>
Tue, 8 Mar 2011 09:20:54 +0000 (10:20 +0100)
examples/solv.c
ext/sat_xfopen.c
ext/sat_xfopen.h
tools/installcheck.c
tools/patchcheck.c
tools/rpmmd2solv.c
tools/susetags2solv.c

index f33b8c837c1705bcb279ca9f6f948fa3801ce47c..f9a0f7a38bd2678a1e105cda85765c6de73d8f3b 100644 (file)
@@ -850,7 +850,7 @@ curlfopen(struct repoinfo *cinfo, const char *file, int uncompress, const unsign
       return 0;
     }
   if (uncompress)
-    return sat_xfopen_fd(".gz", fd);
+    return sat_xfopen_fd(".gz", fd, 0);
   fcntl(fd, F_SETFD, FD_CLOEXEC);
   return fdopen(fd, "r");
 }
index b745826b9048c2f8077d7d49db59b3cf40a9c369..07fcfe37d9812e7716aebb41aadabd6f9b0b5d9f 100644 (file)
@@ -46,42 +46,47 @@ static FILE *mygzfopen(gzFile* gzf)
 }
 
 FILE *
-sat_xfopen(const char *fn)
+sat_xfopen(const char *fn, const char *mode)
 {
   char *suf;
   gzFile *gzf;
 
   if (!fn)
     return 0;
+  if (!mode)
+    mode = "r";
   suf = strrchr(fn, '.');
   if (!suf || strcmp(suf, ".gz") != 0)
-    return fopen(fn, "r");
-  gzf = gzopen(fn, "r");
+    return fopen(fn, mode);
+  gzf = gzopen(fn, mode);
   if (!gzf)
     return 0;
   return mygzfopen(gzf);
 }
 
 FILE *
-sat_xfopen_fd(const char *fn, int fd)
+sat_xfopen_fd(const char *fn, int fd, const char *mode)
 {
   char *suf;
   gzFile *gzf;
 
   suf = fn ? strrchr(fn, '.') : 0;
-  if (!suf || strcmp(suf, ".gz") != 0)
+  if (!mode)
     {
       int fl = fcntl(fd, F_GETFL, 0);
       if (fl == -1)
        return 0;
       fl &= O_RDONLY|O_WRONLY|O_RDWR;
       if (fl == O_WRONLY)
-        return fdopen(fd, "w");
+       mode = "w";
       else if (fl == O_RDWR)
-        return fdopen(fd, "r+");
-      return fdopen(fd, "r");
+       mode = "r+";
+      else
+       mode = "r";
     }
-  gzf = gzdopen(fd, "r");
+  if (!suf || strcmp(suf, ".gz") != 0)
+    return fdopen(fd, mode);
+  gzf = gzdopen(fd, mode);
   if (!gzf)
     return 0;
   return mygzfopen(gzf);
index 826627df6515149ef413018ecbfa0b3c06a78cec..910dfabf2cdfa6af8f5ab2b02d889ce34b4e298c 100644 (file)
@@ -1,7 +1,7 @@
 #ifndef SAT_XFOPEN_H
 #define SAT_XFOPEN_H
 
-extern FILE *sat_xfopen(const char *fn);
-extern FILE *sat_xfopen_fd(const char *fn, int fd);
+extern FILE *sat_xfopen(const char *fn, const char *mode);
+extern FILE *sat_xfopen_fd(const char *fn, int fd, const char *mode);
 
 #endif
index 98c764f13d5ce5903d1b6fc0e14e413cca828d82..f189e9c2ff18705ebc33d0118963d51393786251 100644 (file)
@@ -97,7 +97,7 @@ main(int argc, char **argv)
       l = strlen(argv[i]);
       if (!strcmp(argv[i], "-"))
        fp = stdin;
-      else if ((fp = sat_xfopen(argv[i])) == 0)
+      else if ((fp = sat_xfopen(argv[i], 0)) == 0)
        {
          perror(argv[i]);
          exit(1);
index 82c612b0b8ceac43d8a8bdf05c04330d061f13b9..5a27525269ea8cdec9f5b21329a504839a5ed3e2 100644 (file)
@@ -527,7 +527,7 @@ main(int argc, char **argv)
       l = strlen(argv[i]);
       if (!strcmp(argv[i], "-"))
         fp = stdin;
-      else if ((fp = sat_xfopen(argv[i])) == 0)
+      else if ((fp = sat_xfopen(argv[i], 0)) == 0)
         {
           perror(argv[i]);
           exit(1);
index 328af85998d87a8d795f073856df3fc754d9a9d5..18ec7ed869edafbb1c494a09abbfffa0e9f1563d 100644 (file)
@@ -80,7 +80,7 @@ main(int argc, char **argv)
       l = strlen(dir) + 128;
       fnp = sat_malloc(l+1);
       snprintf(fnp, l, "%s/primary.xml.gz", dir);
-      if (!(fp = sat_xfopen(fnp)))
+      if (!(fp = sat_xfopen(fnp, 0)))
        {
          perror(fnp);
          exit(1);
@@ -88,7 +88,7 @@ main(int argc, char **argv)
       repo_add_rpmmd(repo, fp, 0, flags);
       fclose(fp);
       snprintf(fnp, l, "%s/diskusagedata.xml.gz", dir);
-      if ((fp = sat_xfopen(fnp)))
+      if ((fp = sat_xfopen(fnp, 0)))
        {
          repo_add_rpmmd(repo, fp, 0, flags);
          fclose(fp);
@@ -100,7 +100,7 @@ main(int argc, char **argv)
              fprintf(stderr, "-l parameter too long\n");
              exit(1);
            }
-         while (!(fp = sat_xfopen(fnp)))
+         while (!(fp = sat_xfopen(fnp, 0)))
            {
              fprintf(stderr, "not opened %s\n", fnp);
              if (strlen(locale) > 2)
@@ -110,7 +110,7 @@ main(int argc, char **argv)
                      fprintf(stderr, "-l parameter too long\n");
                      exit(1);
                    }
-                 if ((fp = sat_xfopen(fnp)))
+                 if ((fp = sat_xfopen(fnp, 0)))
                    break;
                }
              perror(fnp);
index 2b926bb33de299cfabce4198bcca95c932f9b234..a10adb314381c4e924fe06133ceb2cf381537ed0 100644 (file)
@@ -171,7 +171,7 @@ main(int argc, char **argv)
          if (!strcmp(fn, "packages") || !strcmp(fn, "packages.gz"))
            {
              sprintf(fnp, "%s/%s", descrdir, fn);
-             FILE *fp = sat_xfopen(fnp);
+             FILE *fp = sat_xfopen(fnp, 0);
              if (!fp)
                {
                  perror(fn);
@@ -183,7 +183,7 @@ main(int argc, char **argv)
          else if (!strcmp(fn, "packages.DU") || !strcmp(fn, "packages.DU.gz"))
            {
              sprintf(fnp, "%s/%s", descrdir, fn);
-             FILE *fp = sat_xfopen(fnp);
+             FILE *fp = sat_xfopen(fnp, 0);
              if (!fp)
                {
                  perror(fn);
@@ -196,7 +196,7 @@ main(int argc, char **argv)
            {
 #if 0
              sprintf(fnp, "%s/%s", descrdir, fn);
-             FILE *fp = sat_xfopen(fnp);
+             FILE *fp = sat_xfopen(fnp, 0);
              if (!fp)
                {
                  perror(fn);
@@ -224,7 +224,7 @@ main(int argc, char **argv)
                continue;
              strcpy(lang, p + 1);
              sprintf(fnp, "%s/%s", descrdir, fn);
-             FILE *fp = sat_xfopen(fnp);
+             FILE *fp = sat_xfopen(fnp, 0);
              if (!fp)
                {
                  perror(fn);