Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 453f2e75 in mainline


Ignore:
Timestamp:
2009-11-03T22:24:44Z (11 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
master
Children:
dfddfcd
Parents:
1647323
Message:

Make fat_read() never assert on an I/O error.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/fat/fat_ops.c

    r1647323 r453f2e75  
    10771077                        rc = fat_block_get(&b, bs, nodep, pos / bps,
    10781078                            BLOCK_FLAGS_NONE);
    1079                         assert(rc == EOK);
     1079                        if (rc != EOK) {
     1080                                fat_node_put(fn);
     1081                                ipc_answer_0(callid, rc);
     1082                                ipc_answer_0(rid, rc);
     1083                                return;
     1084                        }
    10801085                        (void) async_data_read_finalize(callid, b->data + pos % bps,
    10811086                            bytes);
    10821087                        rc = block_put(b);
    1083                         assert(rc == EOK);
     1088                        if (rc != EOK) {
     1089                                fat_node_put(fn);
     1090                                ipc_answer_0(rid, rc);
     1091                                return;
     1092                        }
    10841093                }
    10851094        } else {
     
    11051114                        rc = fat_block_get(&b, bs, nodep, bnum,
    11061115                            BLOCK_FLAGS_NONE);
    1107                         assert(rc == EOK);
     1116                        if (rc != EOK)
     1117                                goto err;
    11081118                        for (o = pos % (bps / sizeof(fat_dentry_t));
    11091119                            o < bps / sizeof(fat_dentry_t);
     
    11161126                                case FAT_DENTRY_LAST:
    11171127                                        rc = block_put(b);
    1118                                         assert(rc == EOK);
     1128                                        if (rc != EOK)
     1129                                                goto err;
    11191130                                        goto miss;
    11201131                                default:
     
    11221133                                        fat_dentry_name_get(d, name);
    11231134                                        rc = block_put(b);
    1124                                         assert(rc == EOK);
     1135                                        if (rc != EOK)
     1136                                                goto err;
    11251137                                        goto hit;
    11261138                                }
    11271139                        }
    11281140                        rc = block_put(b);
    1129                         assert(rc == EOK);
     1141                        if (rc != EOK)
     1142                                goto err;
    11301143                        bnum++;
    11311144                }
    11321145miss:
    1133                 fat_node_put(fn);
    1134                 ipc_answer_0(callid, ENOENT);
    1135                 ipc_answer_1(rid, ENOENT, 0);
    1136                 return;
     1146                rc = fat_node_put(fn);
     1147                ipc_answer_0(callid, rc != EOK ? rc : ENOENT);
     1148                ipc_answer_1(rid, rc != EOK ? rc : ENOENT, 0);
     1149                return;
     1150
     1151err:
     1152                (void) fat_node_put(fn);
     1153                ipc_answer_0(callid, rc);
     1154                ipc_answer_0(rid, rc);
     1155                return;
     1156
    11371157hit:
    11381158                (void) async_data_read_finalize(callid, name, str_size(name) + 1);
     
    11401160        }
    11411161
    1142         fat_node_put(fn);
    1143         ipc_answer_1(rid, EOK, (ipcarg_t)bytes);
     1162        rc = fat_node_put(fn);
     1163        ipc_answer_1(rid, rc, (ipcarg_t)bytes);
    11441164}
    11451165
Note: See TracChangeset for help on using the changeset viewer.