Changes in uspace/app/bdsh/cmds/modules/touch/touch.c [971cc0cc:36ab7c7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/cmds/modules/touch/touch.c
r971cc0cc r36ab7c7 27 27 */ 28 28 29 /* 30 * TODO: Options that people would expect, such as specifying the access time, 31 * etc. 32 */ 29 /* TODO: Options that people would expect, such as not creating the file if 30 * it doesn't exist, specifying the access time, etc */ 33 31 34 32 #include <stdio.h> … … 39 37 #include <sys/types.h> 40 38 #include <str.h> 41 #include <getopt.h>42 #include <sys/stat.h>43 #include <errno.h>44 39 45 40 #include "config.h" … … 52 47 static const char *cmdname = "touch"; 53 48 54 static struct option const long_options[] = {55 { "no-create", no_argument, 0, 'c' },56 { 0, 0, 0, 0 }57 };58 59 49 /* Dispays help for touch in various levels */ 60 50 void help_cmd_touch(unsigned int level) 61 51 { 62 52 if (level == HELP_SHORT) { 63 printf("`%s' updates access times offiles\n", cmdname);53 printf("`%s' updates access times for files\n", cmdname); 64 54 } else { 65 55 help_cmd_touch(HELP_SHORT); 66 printf("Usage: `%s' [-c|--no-create] <file>...\n\n" 67 "If the file does not exist it will be created empty,\n" 68 "unless -c (--no-create) is supplied.\n\n" 69 "Options:\n" 70 " -c, --no-create Do not create new files\n", 71 cmdname); 56 printf(" `%s' <file>, if the file does not exist it will be " 57 "created\n", cmdname); 72 58 } 73 59 74 60 return; 75 61 } … … 78 64 int cmd_touch(char **argv) 79 65 { 80 unsigned int argc = cli_count_args(argv); 81 unsigned int i = 0; 82 unsigned int ret = 0; 83 int c; 84 int longind; 85 bool no_create = false; 86 struct stat file_stat; 87 int fd = -1; 66 unsigned int argc, i = 0, ret = 0; 67 int fd; 88 68 char *buff = NULL; 89 69 90 70 DIR *dirp; 91 92 for (c = 0, optind = 0, longind = 0; c != -1; ) { 93 c = getopt_long(argc, argv, "c", long_options, &longind); 94 switch (c) { 95 case 'c': 96 no_create = true; 97 break; 98 } 99 } 100 101 if (argc - optind < 1) { 102 printf("%s: Incorrect number of arguments. Try `help %s extended'\n", 103 cmdname, cmdname); 71 72 argc = cli_count_args(argv); 73 74 if (argc == 1) { 75 printf("%s - incorrect number of arguments. Try `help %s extended'\n", 76 cmdname, cmdname); 104 77 return CMD_FAILURE; 105 78 } 106 107 for (i = optind; argv[i] != NULL; i++) {79 80 for (i = 1; i < argc; i ++) { 108 81 buff = str_dup(argv[i]); 109 if (buff == NULL) { 110 cli_error(CL_ENOMEM, "Out of memory"); 111 ret++; 82 dirp = opendir(buff); 83 if (dirp) { 84 cli_error(CL_ENOTSUP, "%s is a directory", buff); 85 closedir(dirp); 86 ret ++; 112 87 continue; 113 88 } 114 115 dirp = opendir(buff); 116 if (dirp) { 117 cli_error(CL_ENOTSUP, "`%s' is a directory", buff); 118 closedir(dirp); 119 free(buff); 120 ret++; 89 90 fd = open(buff, O_RDWR | O_CREAT); 91 if (fd < 0) { 92 cli_error(CL_EFAIL, "Could not update / create %s ", buff); 93 ret ++; 121 94 continue; 122 } 123 124 /* Check whether file exists if -c (--no-create) option is given */ 125 if ((!no_create) || ((no_create) && (stat(buff, &file_stat) == EOK))) 126 fd = open(buff, O_RDWR | O_CREAT); 127 128 if (fd < 0) { 129 cli_error(CL_EFAIL, "Could not update or create `%s'", buff); 130 free(buff); 131 ret++; 132 continue; 133 } else { 95 } else 134 96 close(fd); 135 fd = -1; 136 } 137 97 138 98 free(buff); 139 99 } 140 100 141 101 if (ret) 142 102 return CMD_FAILURE; … … 144 104 return CMD_SUCCESS; 145 105 } 106
Note:
See TracChangeset
for help on using the changeset viewer.