- 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
- Files:
-
- 9 edited
-
app/nav/dlg/newfiledlg.c (modified) (10 diffs)
-
app/nav/newfile.c (modified) (5 diffs)
-
app/nav/types/dlg/newfiledlg.h (modified) (3 diffs)
-
app/nav/types/newfile.h (modified) (2 diffs)
-
app/newfile/newfile.c (modified) (1 diff)
-
lib/fmgt/include/fmgt.h (modified) (1 diff)
-
lib/fmgt/include/types/fmgt.h (modified) (1 diff)
-
lib/fmgt/src/fmgt.c (modified) (2 diffs)
-
lib/fmgt/test/fmgt.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/nav/dlg/newfiledlg.c
rcfd04c4 r0cf3d5f 37 37 #include <fmgt.h> 38 38 #include <mem.h> 39 #include <stdbool.h> 39 40 #include <stdlib.h> 40 41 #include <ui/entry.h> … … 81 82 ui_label_t *label = NULL; 82 83 ui_entry_t *entry = NULL; 84 ui_checkbox_t *checkbox = NULL; 83 85 ui_pbutton_t *bok = NULL; 84 86 ui_pbutton_t *bcancel = NULL; … … 101 103 wparams.rect.p0.y = 0; 102 104 wparams.rect.p1.x = 40; 103 wparams.rect.p1.y = 1 1;105 wparams.rect.p1.y = 13; 104 106 } else { 105 107 wparams.rect.p0.x = 0; 106 108 wparams.rect.p0.y = 0; 107 109 wparams.rect.p1.x = 300; 108 wparams.rect.p1.y = 1 35;110 wparams.rect.p1.y = 155; 109 111 } 110 112 … … 234 236 entry = NULL; 235 237 238 rc = ui_checkbox_create(ui_res, "Sparse", &checkbox); 239 if (rc != EOK) 240 goto error; 241 242 /* FIXME: Auto layout */ 243 if (ui_is_textmode(ui)) { 244 rect.p0.x = 3; 245 rect.p0.y = 8; 246 rect.p1.x = 17; 247 rect.p1.y = 9; 248 } else { 249 rect.p0.x = 10; 250 rect.p0.y = 100; 251 rect.p1.x = 190; 252 rect.p1.y = 120; 253 } 254 255 ui_checkbox_set_rect(checkbox, &rect); 256 257 rc = ui_fixed_add(fixed, ui_checkbox_ctl(checkbox)); 258 if (rc != EOK) 259 goto error; 260 261 dialog->sparse = checkbox; 262 checkbox = NULL; 263 236 264 rc = ui_pbutton_create(ui_res, "OK", &bok); 237 265 if (rc != EOK) … … 243 271 if (ui_is_textmode(ui)) { 244 272 rect.p0.x = 10; 245 rect.p0.y = 8;273 rect.p0.y = 10; 246 274 rect.p1.x = 20; 247 rect.p1.y = 9;275 rect.p1.y = 11; 248 276 } else { 249 277 rect.p0.x = 55; 250 rect.p0.y = 90;278 rect.p0.y = 120; 251 279 rect.p1.x = 145; 252 rect.p1.y = 1 18;280 rect.p1.y = 148; 253 281 } 254 282 … … 273 301 if (ui_is_textmode(ui)) { 274 302 rect.p0.x = 22; 275 rect.p0.y = 8;303 rect.p0.y = 10; 276 304 rect.p1.x = 32; 277 rect.p1.y = 9;305 rect.p1.y = 11; 278 306 } else { 279 307 rect.p0.x = 155; 280 rect.p0.y = 90;308 rect.p0.y = 120; 281 309 rect.p1.x = 245; 282 rect.p1.y = 1 18;310 rect.p1.y = 148; 283 311 } 284 312 … … 307 335 if (entry != NULL) 308 336 ui_entry_destroy(entry); 337 if (checkbox != NULL) 338 ui_checkbox_destroy(checkbox); 309 339 if (bok != NULL) 310 340 ui_pbutton_destroy(bok); … … 375 405 const char *fname; 376 406 const char *fsize; 407 bool sparse; 377 408 378 409 if (event->type == KEY_PRESS && … … 383 414 fname = ui_entry_get_text(dialog->ename); 384 415 fsize = ui_entry_get_text(dialog->esize); 416 sparse = 417 ui_checkbox_get_checked(dialog->sparse); 385 418 dialog->cb->bok(dialog, dialog->arg, fname, 386 fsize );419 fsize, sparse); 387 420 return; 388 421 } … … 409 442 const char *fname; 410 443 const char *fsize; 444 bool sparse; 411 445 412 446 if (dialog->cb != NULL && dialog->cb->bok != NULL) { 413 447 fname = ui_entry_get_text(dialog->ename); 414 448 fsize = ui_entry_get_text(dialog->esize); 415 dialog->cb->bok(dialog, dialog->arg, fname, fsize); 449 sparse = ui_checkbox_get_checked(dialog->sparse); 450 dialog->cb->bok(dialog, dialog->arg, fname, fsize, sparse); 416 451 } 417 452 } -
uspace/app/nav/newfile.c
rcfd04c4 r0cf3d5f 44 44 #include <ui/ui.h> 45 45 #include <ui/window.h> 46 #include <stdbool.h> 46 47 #include <str.h> 47 48 #include "dlg/newfiledlg.h" … … 52 53 #include "types/newfile.h" 53 54 54 static void new_file_bok(new_file_dlg_t *, void *, const char *, const char *); 55 static void new_file_bok(new_file_dlg_t *, void *, const char *, const char *, 56 bool); 55 57 static void new_file_bcancel(new_file_dlg_t *, void *); 56 58 static void new_file_close(new_file_dlg_t *, void *); … … 104 106 fmgt_set_init_update(fmgt, true); 105 107 106 rc = fmgt_new_file(fmgt, job->fname, job->nbytes); 108 rc = fmgt_new_file(fmgt, job->fname, job->nbytes, 109 job->sparse ? nf_sparse : nf_none); 107 110 if (rc != EOK) { 108 111 rv = asprintf(&msg, "Error creating file (%s).", … … 137 140 * @param fname New file name 138 141 * @param fsize New file size 142 * @param sparse @c true to create a sparse file 139 143 */ 140 144 static void new_file_bok(new_file_dlg_t *dlg, void *arg, const char *fname, 141 const char *fsize )145 const char *fsize, bool sparse) 142 146 { 143 147 navigator_t *nav = (navigator_t *)arg; … … 175 179 job->fname = fname; 176 180 job->nbytes = nbytes; 181 job->sparse = sparse; 177 182 178 183 progress_dlg_params_init(&pd_params); -
uspace/app/nav/types/dlg/newfiledlg.h
rcfd04c4 r0cf3d5f 38 38 39 39 #include <errno.h> 40 #include <ui/checkbox.h> 40 41 #include <ui/entry.h> 41 42 #include <ui/pbutton.h> 42 43 #include <ui/window.h> 44 #include <stdbool.h> 43 45 44 46 /** New File dialog */ … … 50 52 /** File size text entry */ 51 53 ui_entry_t *esize; 54 /** Sparse checkbox */ 55 ui_checkbox_t *sparse; 52 56 /** OK button */ 53 57 ui_pbutton_t *bok; … … 63 67 typedef struct new_file_dlg_cb { 64 68 /** OK button was pressed */ 65 void (*bok)(new_file_dlg_t *, void *, const char *, const char * );69 void (*bok)(new_file_dlg_t *, void *, const char *, const char *, bool); 66 70 /** Cancel button was pressed */ 67 71 void (*bcancel)(new_file_dlg_t *, void *); -
uspace/app/nav/types/newfile.h
rcfd04c4 r0cf3d5f 37 37 #define TYPES_NEWFILE_H 38 38 39 #include <stdbool.h> 39 40 #include <stdint.h> 40 41 … … 47 48 /** New file size */ 48 49 uint64_t nbytes; 50 /** @c true to create a sparse file */ 51 bool sparse; 49 52 } navigator_new_file_job_t; 50 53 -
uspace/app/newfile/newfile.c
rcfd04c4 r0cf3d5f 166 166 fmgt_set_cb(fmgt, &newfile_fmgt_cb, NULL); 167 167 168 rc = fmgt_new_file(fmgt, fname, nbytes );168 rc = fmgt_new_file(fmgt, fname, nbytes, sparse ? nf_sparse : nf_none); 169 169 if (rc != EOK) { 170 170 printf("Error creating file: %s.\n", str_error(rc)); -
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.
