1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Copyright (c) 2014 Lukasz Marek 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a copy 5cabdff1aSopenharmony_ci * of this software and associated documentation files (the "Software"), to deal 6cabdff1aSopenharmony_ci * in the Software without restriction, including without limitation the rights 7cabdff1aSopenharmony_ci * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8cabdff1aSopenharmony_ci * copies of the Software, and to permit persons to whom the Software is 9cabdff1aSopenharmony_ci * furnished to do so, subject to the following conditions: 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * The above copyright notice and this permission notice shall be included in 12cabdff1aSopenharmony_ci * all copies or substantial portions of the Software. 13cabdff1aSopenharmony_ci * 14cabdff1aSopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15cabdff1aSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16cabdff1aSopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17cabdff1aSopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18cabdff1aSopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19cabdff1aSopenharmony_ci * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20cabdff1aSopenharmony_ci * THE SOFTWARE. 21cabdff1aSopenharmony_ci */ 22cabdff1aSopenharmony_ci 23cabdff1aSopenharmony_ci#include <libavcodec/avcodec.h> 24cabdff1aSopenharmony_ci#include <libavformat/avformat.h> 25cabdff1aSopenharmony_ci#include <libavformat/avio.h> 26cabdff1aSopenharmony_ci 27cabdff1aSopenharmony_cistatic const char *type_string(int type) 28cabdff1aSopenharmony_ci{ 29cabdff1aSopenharmony_ci switch (type) { 30cabdff1aSopenharmony_ci case AVIO_ENTRY_DIRECTORY: 31cabdff1aSopenharmony_ci return "<DIR>"; 32cabdff1aSopenharmony_ci case AVIO_ENTRY_FILE: 33cabdff1aSopenharmony_ci return "<FILE>"; 34cabdff1aSopenharmony_ci case AVIO_ENTRY_BLOCK_DEVICE: 35cabdff1aSopenharmony_ci return "<BLOCK DEVICE>"; 36cabdff1aSopenharmony_ci case AVIO_ENTRY_CHARACTER_DEVICE: 37cabdff1aSopenharmony_ci return "<CHARACTER DEVICE>"; 38cabdff1aSopenharmony_ci case AVIO_ENTRY_NAMED_PIPE: 39cabdff1aSopenharmony_ci return "<PIPE>"; 40cabdff1aSopenharmony_ci case AVIO_ENTRY_SYMBOLIC_LINK: 41cabdff1aSopenharmony_ci return "<LINK>"; 42cabdff1aSopenharmony_ci case AVIO_ENTRY_SOCKET: 43cabdff1aSopenharmony_ci return "<SOCKET>"; 44cabdff1aSopenharmony_ci case AVIO_ENTRY_SERVER: 45cabdff1aSopenharmony_ci return "<SERVER>"; 46cabdff1aSopenharmony_ci case AVIO_ENTRY_SHARE: 47cabdff1aSopenharmony_ci return "<SHARE>"; 48cabdff1aSopenharmony_ci case AVIO_ENTRY_WORKGROUP: 49cabdff1aSopenharmony_ci return "<WORKGROUP>"; 50cabdff1aSopenharmony_ci case AVIO_ENTRY_UNKNOWN: 51cabdff1aSopenharmony_ci default: 52cabdff1aSopenharmony_ci break; 53cabdff1aSopenharmony_ci } 54cabdff1aSopenharmony_ci return "<UNKNOWN>"; 55cabdff1aSopenharmony_ci} 56cabdff1aSopenharmony_ci 57cabdff1aSopenharmony_cistatic int list_op(const char *input_dir) 58cabdff1aSopenharmony_ci{ 59cabdff1aSopenharmony_ci AVIODirEntry *entry = NULL; 60cabdff1aSopenharmony_ci AVIODirContext *ctx = NULL; 61cabdff1aSopenharmony_ci int cnt, ret; 62cabdff1aSopenharmony_ci char filemode[4], uid_and_gid[20]; 63cabdff1aSopenharmony_ci 64cabdff1aSopenharmony_ci if ((ret = avio_open_dir(&ctx, input_dir, NULL)) < 0) { 65cabdff1aSopenharmony_ci av_log(NULL, AV_LOG_ERROR, "Cannot open directory: %s.\n", av_err2str(ret)); 66cabdff1aSopenharmony_ci goto fail; 67cabdff1aSopenharmony_ci } 68cabdff1aSopenharmony_ci 69cabdff1aSopenharmony_ci cnt = 0; 70cabdff1aSopenharmony_ci for (;;) { 71cabdff1aSopenharmony_ci if ((ret = avio_read_dir(ctx, &entry)) < 0) { 72cabdff1aSopenharmony_ci av_log(NULL, AV_LOG_ERROR, "Cannot list directory: %s.\n", av_err2str(ret)); 73cabdff1aSopenharmony_ci goto fail; 74cabdff1aSopenharmony_ci } 75cabdff1aSopenharmony_ci if (!entry) 76cabdff1aSopenharmony_ci break; 77cabdff1aSopenharmony_ci if (entry->filemode == -1) { 78cabdff1aSopenharmony_ci snprintf(filemode, 4, "???"); 79cabdff1aSopenharmony_ci } else { 80cabdff1aSopenharmony_ci snprintf(filemode, 4, "%3"PRIo64, entry->filemode); 81cabdff1aSopenharmony_ci } 82cabdff1aSopenharmony_ci snprintf(uid_and_gid, 20, "%"PRId64"(%"PRId64")", entry->user_id, entry->group_id); 83cabdff1aSopenharmony_ci if (cnt == 0) 84cabdff1aSopenharmony_ci av_log(NULL, AV_LOG_INFO, "%-9s %12s %30s %10s %s %16s %16s %16s\n", 85cabdff1aSopenharmony_ci "TYPE", "SIZE", "NAME", "UID(GID)", "UGO", "MODIFIED", 86cabdff1aSopenharmony_ci "ACCESSED", "STATUS_CHANGED"); 87cabdff1aSopenharmony_ci av_log(NULL, AV_LOG_INFO, "%-9s %12"PRId64" %30s %10s %s %16"PRId64" %16"PRId64" %16"PRId64"\n", 88cabdff1aSopenharmony_ci type_string(entry->type), 89cabdff1aSopenharmony_ci entry->size, 90cabdff1aSopenharmony_ci entry->name, 91cabdff1aSopenharmony_ci uid_and_gid, 92cabdff1aSopenharmony_ci filemode, 93cabdff1aSopenharmony_ci entry->modification_timestamp, 94cabdff1aSopenharmony_ci entry->access_timestamp, 95cabdff1aSopenharmony_ci entry->status_change_timestamp); 96cabdff1aSopenharmony_ci avio_free_directory_entry(&entry); 97cabdff1aSopenharmony_ci cnt++; 98cabdff1aSopenharmony_ci }; 99cabdff1aSopenharmony_ci 100cabdff1aSopenharmony_ci fail: 101cabdff1aSopenharmony_ci avio_close_dir(&ctx); 102cabdff1aSopenharmony_ci return ret; 103cabdff1aSopenharmony_ci} 104cabdff1aSopenharmony_ci 105cabdff1aSopenharmony_cistatic void usage(const char *program_name) 106cabdff1aSopenharmony_ci{ 107cabdff1aSopenharmony_ci fprintf(stderr, "usage: %s input_dir\n" 108cabdff1aSopenharmony_ci "API example program to show how to list files in directory " 109cabdff1aSopenharmony_ci "accessed through AVIOContext.\n", program_name); 110cabdff1aSopenharmony_ci} 111cabdff1aSopenharmony_ci 112cabdff1aSopenharmony_ciint main(int argc, char *argv[]) 113cabdff1aSopenharmony_ci{ 114cabdff1aSopenharmony_ci int ret; 115cabdff1aSopenharmony_ci 116cabdff1aSopenharmony_ci av_log_set_level(AV_LOG_DEBUG); 117cabdff1aSopenharmony_ci 118cabdff1aSopenharmony_ci if (argc < 2) { 119cabdff1aSopenharmony_ci usage(argv[0]); 120cabdff1aSopenharmony_ci return 1; 121cabdff1aSopenharmony_ci } 122cabdff1aSopenharmony_ci 123cabdff1aSopenharmony_ci avformat_network_init(); 124cabdff1aSopenharmony_ci 125cabdff1aSopenharmony_ci ret = list_op(argv[1]); 126cabdff1aSopenharmony_ci 127cabdff1aSopenharmony_ci avformat_network_deinit(); 128cabdff1aSopenharmony_ci 129cabdff1aSopenharmony_ci return ret < 0 ? 1 : 0; 130cabdff1aSopenharmony_ci} 131