FreeCalypso > hg > freecalypso-sw
view rvinterf/etmsync/fsread.c @ 283:88eed3327682
fc-fsio: ll command implemented
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Fri, 28 Feb 2014 04:54:47 +0000 |
parents | |
children | 7b4d4e3e610a |
line wrap: on
line source
/* * Commands for reading the content of a GSM device's file system */ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <strings.h> #include "etm.h" #include "ffs.h" #include "tmffs2.h" #include "limits.h" #include "localtypes.h" #include "localstruct.h" #include "exitcodes.h" void ll_print_line(pathname, stat) char *pathname; struct stat_info *stat; { char readonly; if (stat->flags & OF_READONLY) readonly = 'r'; else readonly = ' '; switch (stat->type) { case OT_FILE: printf("f%c %7u %s\n", readonly, stat->size, pathname); return; case OT_DIR: printf("d%c %s\n", readonly, pathname); return; case OT_LINK: printf("l%c %s\n", readonly, pathname); return; default: printf("?%c %s\n", readonly, pathname); } } void mk_ffs_child_path_from_readdir(dirpath, rdname, buf) char *dirpath, *rdname, *buf; { char *tailp; tailp = index(dirpath, '\0') - 1; if (*tailp == '/') sprintf(buf, "%s%s", dirpath, rdname); else sprintf(buf, "%s/%s", dirpath, rdname); } cmd_ll(argc, argv) char **argv; { struct stat_info stat; u_char rdstate[4]; char rdbuf[TMFFS_STRING_SIZE], childpath[TMFFS_STRING_SIZE*2]; int nument, i, rc; rc = do_xlstat(argv[1], &stat); if (rc) return(rc); if (stat.type != OT_DIR) { ll_print_line(argv[1], &stat); return(0); } rc = do_opendir(argv[1], rdstate, &nument); if (rc) return(rc); if (!nument) { printf("<empty dir>\n"); return(0); } for (i = 0; i < nument; i++) { rc = do_readdir(rdstate, rdbuf); if (rc) return(rc); mk_ffs_child_path_from_readdir(argv[1], rdbuf, childpath); rc = do_xlstat(childpath, &stat); if (rc) { printf("xlstat failed on %s\n", childpath); return(rc); } ll_print_line(childpath, &stat); } return(0); }