Correzioni varie per splice
[gapil.git] / listati / splicecp.c
index 28a6705df7122c82d9f163ff69d2283cf883eb44..52449e68a92c165b73c667b29411fd4e8293d0d3 100644 (file)
@@ -9,26 +9,6 @@ int main(int argc, char *argv[])
     int in_fd, out_fd;
     int nread, nwrite;
     ...
-   /* Main body */
-    if ((argc - optind) != 2) { /* There must two argument */
-        printf("Wrong number of arguments %d\n", argc - optind);
-        usage();
-    }
-    /* open pipe, input and output file */
-    in_fd = open(argv[optind], O_RDONLY);
-    if (in_fd < 0) {
-       printf("Input error %s on %s\n", strerror(errno), argv[optind]);
-       exit(EXIT_FAILURE); 
-    }
-    out_fd = open(argv[optind+1], O_CREAT|O_RDWR|O_TRUNC, 0644);
-    if (out_fd < 0) {
-       printf("Cannot open %s, error %s\n", argv[optind+1], strerror(errno));
-       exit(EXIT_FAILURE); 
-    }
-    if (pipe(pipefd) == -1) {
-       perror("Cannot create buffer pipe"); 
-       exit(EXIT_FAILURE); 
-    }
     /* copy loop */
     while (1) {
        nread = splice(in_fd, NULL, pipefd[1], NULL, size, 
@@ -42,10 +22,9 @@ int main(int argc, char *argv[])
                exit(EXIT_FAILURE);
            } 
        }
-       do {
+       while (nread > 0) {
            nwrite = splice(pipefd[0], NULL, out_fd, NULL, nread, 
                            SPLICE_F_MOVE|SPLICE_F_MORE);
-           if (nwrite == 0) continue;
            if (nwrite < 0) {
                if (errno == EINTR)
                    continue;
@@ -55,7 +34,7 @@ int main(int argc, char *argv[])
                }
            }
            nread -= nwrite;
-       } while (nread);
+       }
     }
     return EXIT_SUCCESS;
 }