Changeset 0cf3d5f in mainline for uspace/lib
- Timestamp:
- 2025-10-10T08:45:43Z (3 months ago)
- Branches:
- master
- Children:
- c3db721
- Parents:
- cfd04c4
- git-author:
- Jiri Svoboda <jiri@…> (2025-10-09 18:45:33)
- git-committer:
- Jiri Svoboda <jiri@…> (2025-10-10 08:45:43)
- Location:
- uspace/lib/fmgt
- Files:
-
- 4 edited
-
include/fmgt.h (modified) (1 diff)
-
include/types/fmgt.h (modified) (1 diff)
-
src/fmgt.c (modified) (2 diffs)
-
test/fmgt.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/fmgt/include/fmgt.h
rcfd04c4 r0cf3d5f 49 49 extern void fmgt_set_init_update(fmgt_t *, bool); 50 50 extern errno_t fmgt_new_file_suggest(char **); 51 extern errno_t fmgt_new_file(fmgt_t *, const char *, uint64_t );51 extern errno_t fmgt_new_file(fmgt_t *, const char *, uint64_t, fmgt_nf_flags_t); 52 52 53 53 #endif -
uspace/lib/fmgt/include/types/fmgt.h
rcfd04c4 r0cf3d5f 75 75 } fmgt_t; 76 76 77 /** New file flags. */ 78 typedef enum { 79 nf_none = 0x0, 80 nf_sparse = 0x1 81 } fmgt_nf_flags_t; 82 77 83 #endif 78 84 -
uspace/lib/fmgt/src/fmgt.c
rcfd04c4 r0cf3d5f 226 226 * @param fname File name 227 227 * @param fsize Size of new file (number of zero bytes to fill in) 228 * @param flags New file flags 228 229 * @return EOK on success or an error code 229 230 */ 230 errno_t fmgt_new_file(fmgt_t *fmgt, const char *fname, uint64_t fsize) 231 errno_t fmgt_new_file(fmgt_t *fmgt, const char *fname, uint64_t fsize, 232 fmgt_nf_flags_t flags) 231 233 { 232 234 int fd; … … 254 256 255 257 fmgt_initial_progress_update(fmgt); 258 259 if ((flags & nf_sparse) != 0) { 260 fmgt->curf_procb = fsize - 1; 261 pos = fsize - 1; 262 } 256 263 257 264 while (fmgt->curf_procb < fsize) { -
uspace/lib/fmgt/test/fmgt.c
rcfd04c4 r0cf3d5f 116 116 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 117 117 118 rc = fmgt_new_file(fmgt, fname, 0 );118 rc = fmgt_new_file(fmgt, fname, 0, nf_none); 119 119 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 120 120 … … 150 150 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 151 151 152 rc = fmgt_new_file(fmgt, fname, 20000 );152 rc = fmgt_new_file(fmgt, fname, 20000, nf_none); 153 153 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 154 154 … … 177 177 } 178 178 179 /** Initial update provided when requested while creating new file. */180 PCUT_TEST(new_file_ init_upd)179 /** New sparse file can be created. */ 180 PCUT_TEST(new_file_sparse) 181 181 { 182 182 FILE *f = NULL; … … 188 188 size_t total_rd; 189 189 size_t i; 190 test_resp_t resp; 191 int rv; 192 193 rc = vfs_cwd_set(TEMP_DIR); 194 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 195 196 rc = fmgt_create(&fmgt); 197 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 198 199 fmgt_set_cb(fmgt, &test_fmgt_cb, (void *)&resp); 200 resp.nupdates = 0; 201 202 fmgt_set_init_update(fmgt, true); 203 204 /* Suggest unique file name. */ 205 rc = fmgt_new_file_suggest(&fname); 206 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 207 208 rc = fmgt_new_file(fmgt, fname, 20000); 190 int rv; 191 192 rc = vfs_cwd_set(TEMP_DIR); 193 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 194 195 rc = fmgt_create(&fmgt); 196 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 197 198 /* Suggest unique file name. */ 199 rc = fmgt_new_file_suggest(&fname); 200 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 201 202 rc = fmgt_new_file(fmgt, fname, 20000, nf_sparse); 209 203 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 210 204 … … 225 219 (void)fclose(f); 226 220 221 /* Remove the file. */ 222 rv = remove(fname); 223 PCUT_ASSERT_INT_EQUALS(0, rv); 224 225 free(fname); 226 fmgt_destroy(fmgt); 227 } 228 229 /** Initial update provided when requested while creating new file. */ 230 PCUT_TEST(new_file_init_upd) 231 { 232 FILE *f = NULL; 233 fmgt_t *fmgt = NULL; 234 char *fname = NULL; 235 char buf[128]; 236 errno_t rc; 237 size_t nr; 238 size_t total_rd; 239 size_t i; 240 test_resp_t resp; 241 int rv; 242 243 rc = vfs_cwd_set(TEMP_DIR); 244 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 245 246 rc = fmgt_create(&fmgt); 247 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 248 249 fmgt_set_cb(fmgt, &test_fmgt_cb, (void *)&resp); 250 resp.nupdates = 0; 251 252 fmgt_set_init_update(fmgt, true); 253 254 /* Suggest unique file name. */ 255 rc = fmgt_new_file_suggest(&fname); 256 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 257 258 rc = fmgt_new_file(fmgt, fname, 20000, nf_none); 259 PCUT_ASSERT_ERRNO_VAL(EOK, rc); 260 261 /* Verify the file. */ 262 f = fopen(fname, "rb"); 263 PCUT_ASSERT_NOT_NULL(f); 264 total_rd = 0; 265 do { 266 nr = fread(buf, 1, sizeof(buf), f); 267 for (i = 0; i < nr; i++) 268 PCUT_ASSERT_INT_EQUALS(0, buf[i]); 269 270 total_rd += nr; 271 } while (nr > 0); 272 273 PCUT_ASSERT_INT_EQUALS(20000, total_rd); 274 275 (void)fclose(f); 276 227 277 PCUT_ASSERT_TRUE(resp.nupdates > 0); 228 278
Note:
See TracChangeset
for help on using the changeset viewer.
