Ignore:
File:
1 edited

Legend:

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

    r8d2dd7f2 rcde999a  
    3131#include <stdlib.h>
    3232#include <stdint.h>
     33#include <str_error.h>
    3334#include <dirent.h>
    3435#include <macros.h>
     
    8586 *
    8687 * @param str   String containing the size specification.
    87  * @return      Non-negative size in bytes on success, -1 on failure.
     88 * @param rsize Place to store size in bytes
     89 * @return      EOK on success or an error code
    8890 */
    89 static ssize_t read_size(const char *str)
     91static int read_size(const char *str, size_t *rsize)
    9092{
    91         ssize_t number, unit;
     93        size_t number, unit;
    9294        char *ep;
    9395
    9496        number = strtol(str, &ep, 10);
    95         if (ep[0] == '\0')
    96                 return number;
     97        if (ep[0] == '\0') {
     98                *rsize = number;
     99                return EOK;
     100        }
    97101
    98102        if (ep[1] != '\0')
    99                     return -1;
     103                    return EINVAL;
    100104
    101105        switch (tolower(ep[0])) {
     
    103107        case 'm': unit = 1024*1024; break;
    104108        case 'g': unit = 1024*1024*1024; break;
    105         default: return -1;
    106         }
    107 
    108         return number * unit;
     109        default: return EINVAL;
     110        }
     111
     112        *rsize = number * unit;
     113        return EOK;
    109114}
    110115
     
    114119        int c, opt_ind;
    115120        int fd;
    116         ssize_t file_size;
    117         ssize_t total_written;
    118         ssize_t to_write, rc, rc2 = 0;
     121        size_t file_size;
     122        size_t total_written;
     123        size_t to_write;
     124        size_t nwritten;
     125        int rc;
    119126        char *file_name;
    120127        void *buffer;
     
    136143                        break;
    137144                case 's':
    138                         file_size = read_size(optarg);
    139                         if (file_size < 0) {
     145                        rc = read_size(optarg, &file_size);
     146                        if (rc != EOK) {
    140147                                printf("%s: Invalid file size specification.\n",
    141148                                    cmdname);
     
    156163        file_name = argv[optind];
    157164
    158         fd = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MUST_CREATE, MODE_WRITE);
    159         if (fd < 0) {
     165        rc = vfs_lookup_open(file_name, WALK_REGULAR | WALK_MUST_CREATE, MODE_WRITE, &fd);
     166        if (rc != EOK) {
    160167                printf("%s: failed to create file %s.\n", cmdname, file_name);
    161168                return CMD_FAILURE;
     
    166173               
    167174                pos = file_size - 1;
    168                 rc2 = vfs_write(fd, &pos, &byte, sizeof(char));
    169                 if (rc2 < 0) {
     175                rc = vfs_write(fd, &pos, &byte, sizeof(char), &nwritten);
     176                if (rc != EOK) {
    170177                        vfs_put(fd);
    171178                        goto error;
     
    183190        while (total_written < file_size) {
    184191                to_write = min(file_size - total_written, BUFFER_SIZE);
    185                 rc = vfs_write(fd, &pos, buffer, to_write);
    186                 if (rc <= 0) {
    187                         printf("%s: Error writing file (%d).\n", cmdname, errno);
     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));
    188195                        vfs_put(fd);
    189196                        free(buffer);
    190197                        return CMD_FAILURE;
    191198                }
    192                 total_written += rc;
     199                total_written += nwritten;
    193200        }
    194201
    195202        free(buffer);
    196203
    197         if (vfs_put(fd) < 0)
     204        rc = vfs_put(fd);
     205        if (rc != EOK)
    198206                goto error;
    199207
    200208        return CMD_SUCCESS;
    201209error:
    202         printf("%s: Error writing file (%d).\n", cmdname, errno);
     210        printf("%s: Error writing file (%s).\n", cmdname, str_error(rc));
    203211        return CMD_FAILURE;
    204212}
Note: See TracChangeset for help on using the changeset viewer.