Changes in / [1dbe465:e367f5b8] in mainline
- Location:
- uspace/app/bdsh/cmds/modules
- Files:
-
- 6 edited
-
cat/cat.h (modified) (1 diff)
-
help/help.h (modified) (1 diff)
-
mkdir/mkdir.h (modified) (1 diff)
-
rm/rm.c (modified) (4 diffs)
-
rm/rm.h (modified) (1 diff)
-
sleep/sleep.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/cmds/modules/cat/cat.h
r1dbe465 re367f5b8 4 4 /* Prototypes for the cat command, excluding entry points */ 5 5 6 static unsigned int cat_file(const char *, size_t, bool, off64_t, off64_t, bool); 7 6 8 #endif /* CAT_H */ 7 9 -
uspace/app/bdsh/cmds/modules/help/help.h
r1dbe465 re367f5b8 3 3 4 4 /* Prototypes for the help command (excluding entry points) */ 5 static int is_mod_or_builtin(char *); 5 6 6 7 #endif -
uspace/app/bdsh/cmds/modules/mkdir/mkdir.h
r1dbe465 re367f5b8 4 4 /* Prototypes for the mkdir command, excluding entry points */ 5 5 6 static unsigned int create_directory(const char *, unsigned int); 6 7 #endif /* MKDIR_H */ 7 8 -
uspace/app/bdsh/cmds/modules/rm/rm.c
r1dbe465 re367f5b8 46 46 #define RM_VERSION "0.0.1" 47 47 48 static rm_job_t rm; 49 48 50 static struct option const long_options[] = { 49 51 { "help", no_argument, 0, 'h' }, … … 55 57 }; 56 58 57 /* Return values for rm_scope() */58 #define RM_BOGUS 059 #define RM_FILE 160 #define RM_DIR 261 62 /* Flags for rm_update() */63 #define _RM_ENTRY 064 #define _RM_ADVANCE 165 #define _RM_REWIND 266 #define _RM_EXIT 367 68 /* A simple job structure */69 typedef struct {70 /* Options set at run time */71 unsigned int force; /* -f option */72 unsigned int recursive; /* -r option */73 unsigned int safe; /* -s option */74 75 /* Keeps track of the job in progress */76 int advance; /* How far deep we've gone since entering */77 DIR *entry; /* Entry point to the tree being removed */78 char *owd; /* Where we were when we invoked rm */79 char *cwd; /* Current directory being transversed */80 char *nwd; /* Next directory to be transversed */81 82 /* Counters */83 int f_removed; /* Number of files unlinked */84 int d_removed; /* Number of directories unlinked */85 } rm_job_t;86 87 static rm_job_t rm;88 89 static unsigned int rm_recursive(const char *);90 91 59 static unsigned int rm_start(rm_job_t *rm) 92 60 { … … 127 95 if (NULL != rm->cwd) 128 96 free(rm->cwd); 129 }130 131 static unsigned int rm_single(const char *path)132 {133 if (unlink(path)) {134 cli_error(CL_EFAIL, "rm: could not remove file %s", path);135 return 1;136 }137 return 0;138 }139 140 static unsigned int rm_scope(const char *path)141 {142 int fd;143 DIR *dirp;144 145 dirp = opendir(path);146 if (dirp) {147 closedir(dirp);148 return RM_DIR;149 }150 151 fd = open(path, O_RDONLY);152 if (fd > 0) {153 close(fd);154 return RM_FILE;155 }156 157 return RM_BOGUS;158 97 } 159 98 … … 215 154 216 155 return ret + 1; 156 } 157 158 static unsigned int rm_single(const char *path) 159 { 160 if (unlink(path)) { 161 cli_error(CL_EFAIL, "rm: could not remove file %s", path); 162 return 1; 163 } 164 return 0; 165 } 166 167 static unsigned int rm_scope(const char *path) 168 { 169 int fd; 170 DIR *dirp; 171 172 dirp = opendir(path); 173 if (dirp) { 174 closedir(dirp); 175 return RM_DIR; 176 } 177 178 fd = open(path, O_RDONLY); 179 if (fd > 0) { 180 close(fd); 181 return RM_FILE; 182 } 183 184 return RM_BOGUS; 217 185 } 218 186 -
uspace/app/bdsh/cmds/modules/rm/rm.h
r1dbe465 re367f5b8 2 2 #define RM_H 3 3 4 /* Return values for rm_scope() */ 5 #define RM_BOGUS 0 6 #define RM_FILE 1 7 #define RM_DIR 2 8 9 /* Flags for rm_update() */ 10 #define _RM_ENTRY 0 11 #define _RM_ADVANCE 1 12 #define _RM_REWIND 2 13 #define _RM_EXIT 3 14 15 /* A simple job structure */ 16 typedef struct { 17 /* Options set at run time */ 18 unsigned int force; /* -f option */ 19 unsigned int recursive; /* -r option */ 20 unsigned int safe; /* -s option */ 21 22 /* Keeps track of the job in progress */ 23 int advance; /* How far deep we've gone since entering */ 24 DIR *entry; /* Entry point to the tree being removed */ 25 char *owd; /* Where we were when we invoked rm */ 26 char *cwd; /* Current directory being transversed */ 27 char *nwd; /* Next directory to be transversed */ 28 29 /* Counters */ 30 int f_removed; /* Number of files unlinked */ 31 int d_removed; /* Number of directories unlinked */ 32 } rm_job_t; 33 34 4 35 /* Prototypes for the rm command, excluding entry points */ 36 static unsigned int rm_start(rm_job_t *); 37 static void rm_end(rm_job_t *rm); 38 static unsigned int rm_recursive(const char *); 39 static unsigned int rm_single(const char *); 40 static unsigned int rm_scope(const char *); 5 41 6 42 #endif /* RM_H */ -
uspace/app/bdsh/cmds/modules/sleep/sleep.c
r1dbe465 re367f5b8 27 27 */ 28 28 29 #include <errno.h>30 29 #include <stdio.h> 31 30 #include <stdlib.h> 32 #include <unistd.h>33 31 #include "config.h" 34 32 #include "util.h" … … 43 41 void help_cmd_sleep(unsigned int level) 44 42 { 45 if (level == HELP_SHORT) { 46 printf("`%s' pauses for a given time interval\n", cmdname); 47 } else { 48 help_cmd_sleep(HELP_SHORT); 49 printf( 50 "Usage: %s <duration>\n" 51 "The duration is a decimal number of seconds.\n", 52 cmdname); 53 } 54 43 printf("This is the %s help for '%s'.\n", 44 level ? EXT_HELP : SHORT_HELP, cmdname); 55 45 return; 56 }57 58 /** Convert string containing decimal seconds to useconds_t.59 *60 * @param nptr Pointer to string.61 * @param result Result of the conversion.62 * @return EOK if conversion was successful.63 */64 static int decimal_to_useconds(const char *nptr, useconds_t *result)65 {66 int ret;67 uint64_t whole_seconds;68 uint64_t frac_seconds;69 char *endptr;70 71 /* Check for whole seconds */72 if (*nptr == '.') {73 whole_seconds = 0;74 endptr = (char *)nptr;75 } else {76 ret = str_uint64_t(nptr, &endptr, 10, false, &whole_seconds);77 if (ret != EOK)78 return ret;79 }80 81 /* Check for fractional seconds */82 if (*endptr == '\0') {83 frac_seconds = 0;84 } else if (*endptr == '.' && endptr[1] == '\0') {85 frac_seconds = 0;86 } else if (*endptr == '.') {87 nptr = endptr + 1;88 ret = str_uint64_t(nptr, &endptr, 10, true, &frac_seconds);89 if (ret != EOK)90 return ret;91 92 int ndigits = endptr - nptr;93 for (; ndigits < 6; ndigits++)94 frac_seconds *= 10;95 for (; ndigits > 6; ndigits--)96 frac_seconds /= 10;97 } else {98 return EINVAL;99 }100 101 /* Check for overflow */102 useconds_t total = whole_seconds * 1000000 + frac_seconds;103 if (total / 1000000 != whole_seconds)104 return EOVERFLOW;105 106 *result = total;107 108 return EOK;109 46 } 110 47 … … 112 49 int cmd_sleep(char **argv) 113 50 { 114 int ret;115 51 unsigned int argc; 116 u seconds_t duration;52 unsigned int i; 117 53 118 54 /* Count the arguments */ 119 argc = cli_count_args(argv);55 for (argc = 0; argv[argc] != NULL; argc ++); 120 56 121 if (argc != 2) { 122 printf("%s - incorrect number of arguments. Try `help %s'\n", 123 cmdname, cmdname); 124 return CMD_FAILURE; 57 printf("%s %s\n", TEST_ANNOUNCE, cmdname); 58 printf("%d arguments passed to %s", argc - 1, cmdname); 59 60 if (argc < 2) { 61 printf("\n"); 62 return CMD_SUCCESS; 125 63 } 126 64 127 ret = decimal_to_useconds(argv[1], &duration); 128 if (ret != EOK) { 129 printf("%s - invalid duration.\n", cmdname); 130 return CMD_FAILURE; 131 } 132 133 (void) usleep(duration); 65 printf(":\n"); 66 for (i = 1; i < argc; i++) 67 printf("[%d] -> %s\n", i, argv[i]); 134 68 135 69 return CMD_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.
