Changeset 8e3498b in mainline for uspace/app/bdsh/cmds/modules/mkfile
- Timestamp:
- 2017-12-04T18:44:24Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- bde5c04
- Parents:
- 40feeac
- File:
-
- 1 edited
-
uspace/app/bdsh/cmds/modules/mkfile/mkfile.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/bdsh/cmds/modules/mkfile/mkfile.c
r40feeac r8e3498b 85 85 * 86 86 * @param str String containing the size specification. 87 * @return Non-negative size in bytes on success, -1 on failure. 87 * @param rsize Place to store size in bytes 88 * @return EOK on success or error code 88 89 */ 89 static ssize_t read_size(const char *str)90 static int read_size(const char *str, size_t *rsize) 90 91 { 91 s size_t number, unit;92 size_t number, unit; 92 93 char *ep; 93 94 94 95 number = strtol(str, &ep, 10); 95 if (ep[0] == '\0') 96 return number; 96 if (ep[0] == '\0') { 97 *rsize = number; 98 return EOK; 99 } 97 100 98 101 if (ep[1] != '\0') 99 return -1;102 return EINVAL; 100 103 101 104 switch (tolower(ep[0])) { … … 103 106 case 'm': unit = 1024*1024; break; 104 107 case 'g': unit = 1024*1024*1024; break; 105 default: return -1; 106 } 107 108 return number * unit; 108 default: return EINVAL; 109 } 110 111 *rsize = number * unit; 112 return EOK; 109 113 } 110 114 … … 114 118 int c, opt_ind; 115 119 int fd; 116 ssize_t file_size; 117 ssize_t total_written; 118 ssize_t to_write, rc, rc2 = 0; 120 size_t file_size; 121 size_t total_written; 122 size_t to_write; 123 size_t nwritten; 124 int rc; 119 125 char *file_name; 120 126 void *buffer; … … 136 142 break; 137 143 case 's': 138 file_size = read_size(optarg);139 if ( file_size < 0) {144 rc = read_size(optarg, &file_size); 145 if (rc != EOK) { 140 146 printf("%s: Invalid file size specification.\n", 141 147 cmdname); … … 166 172 167 173 pos = file_size - 1; 168 rc 2 = vfs_write(fd, &pos, &byte, sizeof(char));169 if (rc 2 < 0) {174 rc = vfs_write(fd, &pos, &byte, sizeof(char), &nwritten); 175 if (rc != EOK) { 170 176 vfs_put(fd); 171 177 goto error; … … 183 189 while (total_written < file_size) { 184 190 to_write = min(file_size - total_written, BUFFER_SIZE); 185 rc = vfs_write(fd, &pos, buffer, to_write );186 if (rc <= 0) {191 rc = vfs_write(fd, &pos, buffer, to_write, &nwritten); 192 if (rc != EOK) { 187 193 printf("%s: Error writing file (%d).\n", cmdname, errno); 188 194 vfs_put(fd); … … 190 196 return CMD_FAILURE; 191 197 } 192 total_written += rc;198 total_written += nwritten; 193 199 } 194 200
Note:
See TracChangeset
for help on using the changeset viewer.
