Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bdsh/cmds/modules/mkfile/mkfile.c

    rcde999a r8d2dd7f2  
    3131#include <stdlib.h>
    3232#include <stdint.h>
    33 #include <str_error.h>
    3433#include <dirent.h>
    3534#include <macros.h>
     
    8685 *
    8786 * @param str   String containing the size specification.
    88  * @param rsize Place to store size in bytes
    89  * @return      EOK on success or an error code
     87 * @return      Non-negative size in bytes on success, -1 on failure.
    9088 */
    91 static int read_size(const char *str, size_t *rsize)
     89static ssize_t read_size(const char *str)
    9290{
    93         size_t number, unit;
     91        ssize_t number, unit;
    9492        char *ep;
    9593
    9694        number = strtol(str, &ep, 10);
    97         if (ep[0] == '\0') {
    98                 *rsize = number;
    99                 return EOK;
    100         }
     95        if (ep[0] == '\0')
     96                return number;
    10197
    10298        if (ep[1] != '\0')
    103                     return EINVAL;
     99                    return -1;
    104100
    105101        switch (tolower(ep[0])) {
     
    107103        case 'm': unit = 1024*1024; break;
    108104        case 'g': unit = 1024*1024*1024; break;
    109         default: return EINVAL;
    110         }
    111 
    112         *rsize = number * unit;
    113         return EOK;
     105        default: return -1;
     106        }
     107
     108        return number * unit;
    114109}
    115110
     
    119114        int c, opt_ind;
    120115        int fd;
    121         size_t file_size;
    122         size_t total_written;
    123         size_t to_write;
    124         size_t nwritten;
    125         int rc;
     116        ssize_t file_size;
     117        ssize_t total_written;
     118        ssize_t to_write, rc, rc2 = 0;
    126119        char *file_name;
    127120        void *buffer;
     
    143136                        break;
    144137                case 's':
    145                         rc = read_size(optarg, &file_size);
    146                         if (rc != EOK) {
     138                        file_size = read_size(optarg);
     139                        if (file_size < 0) {
    147140                                printf("%s: Invalid file size specification.\n",
    148141                                    cmdname);
     
    163156        file_name = argv[optind];
    164157
    165         rc = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MUST_CREATE, MODE_WRITE, &fd);
    166         if (rc != EOK) {
     158        fd = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MUST_CREATE, MODE_WRITE);
     159        if (fd < 0) {
    167160                printf("%s: failed to create file %s.\n", cmdname, file_name);
    168161                return CMD_FAILURE;
     
    173166               
    174167                pos = file_size - 1;
    175                 rc = vfs_write(fd, &pos, &byte, sizeof(char), &nwritten);
    176                 if (rc != EOK) {
     168                rc2 = vfs_write(fd, &pos, &byte, sizeof(char));
     169                if (rc2 < 0) {
    177170                        vfs_put(fd);
    178171                        goto error;
     
    190183        while (total_written < file_size) {
    191184                to_write = min(file_size - total_written, BUFFER_SIZE);
    192                 rc = vfs_write(fd, &pos, buffer, to_write, &nwritten);
    193                 if (rc != EOK) {
    194                         printf("%s: Error writing file (%s).\n", cmdname, str_error(rc));
     185                rc = vfs_write(fd, &pos, buffer, to_write);
     186                if (rc <= 0) {
     187                        printf("%s: Error writing file (%d).\n", cmdname, errno);
    195188                        vfs_put(fd);
    196189                        free(buffer);
    197190                        return CMD_FAILURE;
    198191                }
    199                 total_written += nwritten;
     192                total_written += rc;
    200193        }
    201194
    202195        free(buffer);
    203196
    204         rc = vfs_put(fd);
    205         if (rc != EOK)
     197        if (vfs_put(fd) < 0)
    206198                goto error;
    207199
    208200        return CMD_SUCCESS;
    209201error:
    210         printf("%s: Error writing file (%s).\n", cmdname, str_error(rc));
     202        printf("%s: Error writing file (%d).\n", cmdname, errno);
    211203        return CMD_FAILURE;
    212204}
Note: See TracChangeset for help on using the changeset viewer.