examples/avio_list_dir: add move and delete methods
authorMariusz SzczepaƄczyk <mszczepanczyk@gmail.com>
Sat, 15 Aug 2015 00:01:20 +0000 (02:01 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sat, 15 Aug 2015 01:32:38 +0000 (03:32 +0200)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
doc/examples/avio_list_dir.c

index 4060ba6..50c435c 100644 (file)
@@ -54,28 +54,13 @@ static const char *type_string(int type)
     return "<UNKNOWN>";
 }
 
-int main(int argc, char *argv[])
+static int list_op(const char *input_dir)
 {
-    const char *input_dir = NULL;
     AVIODirEntry *entry = NULL;
     AVIODirContext *ctx = NULL;
     int cnt, ret;
     char filemode[4], uid_and_gid[20];
 
-    av_log_set_level(AV_LOG_DEBUG);
-
-    if (argc != 2) {
-        fprintf(stderr, "usage: %s input_dir\n"
-                "API example program to show how to list files in directory "
-                "accessed through AVIOContext.\n", argv[0]);
-        return 1;
-    }
-    input_dir = argv[1];
-
-    /* register codecs and formats and other lavf/lavc components*/
-    av_register_all();
-    avformat_network_init();
-
     if ((ret = avio_open_dir(&ctx, input_dir, NULL)) < 0) {
         av_log(NULL, AV_LOG_ERROR, "Cannot open directory: %s.\n", av_err2str(ret));
         goto fail;
@@ -114,6 +99,81 @@ int main(int argc, char *argv[])
 
   fail:
     avio_close_dir(&ctx);
+    return ret;
+}
+
+static int del_op(const char *url)
+{
+    int ret = avpriv_io_delete(url);
+    if (ret < 0)
+        av_log(NULL, AV_LOG_ERROR, "Cannot delete '%s': %s.\n", url, av_err2str(ret));
+    return ret;
+}
+
+static int move_op(const char *src, const char *dst)
+{
+    int ret = avpriv_io_move(src, dst);
+    if (ret < 0)
+        av_log(NULL, AV_LOG_ERROR, "Cannot move '%s' into '%s': %s.\n", src, dst, av_err2str(ret));
+    return ret;
+}
+
+
+static void usage(const char *program_name)
+{
+    fprintf(stderr, "usage: %s OPERATION entry1 [entry2]\n"
+            "API example program to show how to manipulate resources "
+            "accessed through AVIOContext.\n"
+            "OPERATIONS:\n"
+            "list      list content of the directory\n"
+            "move      rename content in directory\n"
+            "del       delete content in directory\n",
+            program_name);
+}
+
+int main(int argc, char *argv[])
+{
+    const char *op = NULL;
+    int ret;
+
+    av_log_set_level(AV_LOG_DEBUG);
+
+    if (argc < 2) {
+        usage(argv[0]);
+        return 1;
+    }
+
+    /* register codecs and formats and other lavf/lavc components*/
+    av_register_all();
+    avformat_network_init();
+
+    op = argv[1];
+    if (strcmp(op, "list") == 0) {
+        if (argc < 3) {
+            av_log(NULL, AV_LOG_INFO, "Missing argument for list operation.\n");
+            ret = AVERROR(EINVAL);
+        } else {
+            ret = list_op(argv[2]);
+        }
+    } else if (strcmp(op, "del") == 0) {
+        if (argc < 3) {
+            av_log(NULL, AV_LOG_INFO, "Missing argument for del operation.\n");
+            ret = AVERROR(EINVAL);
+        } else {
+            ret = del_op(argv[2]);
+        }
+    } else if (strcmp(op, "move") == 0) {
+        if (argc < 4) {
+            av_log(NULL, AV_LOG_INFO, "Missing argument for move operation.\n");
+            ret = AVERROR(EINVAL);
+        } else {
+            ret = move_op(argv[2], argv[3]);
+        }
+    } else {
+        av_log(NULL, AV_LOG_INFO, "Invalid operation %s\n", op);
+        ret = AVERROR(EINVAL);
+    }
+
     avformat_network_deinit();
 
     return ret < 0 ? 1 : 0;