Changes in / [8b5001b:da2bd08] in mainline
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified kernel/generic/include/string.h ¶
r8b5001b rda2bd08 87 87 extern void str_cpy(char *dest, size_t size, const char *src); 88 88 extern void str_ncpy(char *dest, size_t size, const char *src, size_t n); 89 extern void wstr_ to_str(char *dest, size_t size, const wchar_t *src);89 extern void wstr_nstr(char *dst, const wchar_t *src, size_t size); 90 90 91 91 extern char *str_chr(const char *str, wchar_t ch); -
TabularUnified kernel/generic/src/console/kconsole.c ¶
r8b5001b rda2bd08 289 289 290 290 char tmp[STR_BOUNDS(MAX_CMDLINE)]; 291 wstr_ to_str(tmp, position - beg + 1, current + beg);291 wstr_nstr(tmp, current + beg, position - beg + 1); 292 292 293 293 int found; … … 665 665 666 666 char cmdline[STR_BOUNDS(MAX_CMDLINE)]; 667 wstr_ to_str(cmdline, STR_BOUNDS(MAX_CMDLINE), tmp);667 wstr_nstr(cmdline, tmp, STR_BOUNDS(MAX_CMDLINE)); 668 668 669 669 if ((!kcon) && (len == 4) && (str_lcmp(cmdline, "exit", 4) == 0)) -
TabularUnified kernel/generic/src/lib/string.c ¶
r8b5001b rda2bd08 537 537 * null-terminated and containing only complete characters. 538 538 * 539 * @param d est Destination buffer.539 * @param dst Destination buffer. 540 540 * @param count Size of the destination buffer (must be > 0). 541 541 * @param src Source string. … … 571 571 * have to be null-terminated. 572 572 * 573 * @param d est Destination buffer.573 * @param dst Destination buffer. 574 574 * @param count Size of the destination buffer (must be > 0). 575 575 * @param src Source string. … … 596 596 } 597 597 598 /** Convert wide string to string. 599 * 600 * Convert wide string @a src to string. The output is written to the buffer 601 * specified by @a dest and @a size. @a size must be non-zero and the string 602 * written will always be well-formed. 603 * 604 * @param dest Destination buffer. 605 * @param size Size of the destination buffer. 606 * @param src Source wide string. 607 */ 608 void wstr_to_str(char *dest, size_t size, const wchar_t *src) 609 { 598 /** Copy NULL-terminated wide string to string 599 * 600 * Copy source wide string @a src to destination buffer @a dst. 601 * No more than @a size bytes are written. NULL-terminator is always 602 * written after the last succesfully copied character (i.e. if the 603 * destination buffer is has at least 1 byte, it will be always 604 * NULL-terminated). 605 * 606 * @param src Source wide string. 607 * @param dst Destination buffer. 608 * @param count Size of the destination buffer. 609 * 610 */ 611 void wstr_nstr(char *dst, const wchar_t *src, size_t size) 612 { 613 /* No space for the NULL-terminator in the buffer */ 614 if (size == 0) 615 return; 616 610 617 wchar_t ch; 611 size_t src_idx; 612 size_t dest_off; 613 614 /* There must be space for a null terminator in the buffer. */ 615 ASSERT(size > 0); 616 617 src_idx = 0; 618 dest_off = 0; 618 size_t src_idx = 0; 619 size_t dst_off = 0; 619 620 620 621 while ((ch = src[src_idx++]) != 0) { 621 if (chr_encode(ch, d est, &dest_off, size - 1) != EOK)622 if (chr_encode(ch, dst, &dst_off, size) != EOK) 622 623 break; 623 624 } 624 625 dest[dest_off] = '\0'; 625 626 if (dst_off >= size) 627 dst[size - 1] = 0; 628 else 629 dst[dst_off] = 0; 626 630 } 627 631 -
TabularUnified uspace/app/bdsh/input.c ¶
r8b5001b rda2bd08 134 134 static char *tinput_get_str(tinput_t *ti) 135 135 { 136 return wstr_to_astr(ti->buffer); 136 char *str; 137 138 str = malloc(STR_BOUNDS(ti->nc) + 1); 139 if (str == NULL) 140 return NULL; 141 142 wstr_nstr(str, ti->buffer, STR_BOUNDS(ti->nc) + 1); 143 144 return str; 137 145 } 138 146 -
TabularUnified uspace/app/edit/edit.c ¶
r8b5001b rda2bd08 36 36 37 37 #include <stdio.h> 38 #include <stdlib.h>39 38 #include <sys/types.h> 40 39 #include <vfs/vfs.h> … … 102 101 #define ED_INFTY 65536 103 102 104 /** Maximum filename length that can be entered. */105 #define INFNAME_MAX_LEN 128106 107 103 static void key_handle_unmod(console_event_t const *ev); 108 104 static void key_handle_ctrl(console_event_t const *ev); 109 105 static int file_save(char const *fname); 110 static void file_save_as(void);111 106 static int file_insert(char *fname); 112 107 static int file_save_range(char const *fname, spt_t const *spos, 113 108 spt_t const *epos); 114 static char *filename_prompt(char const *prompt, char const *init_value);115 109 static void pane_text_display(void); 116 110 static void pane_row_display(void); … … 156 150 157 151 if (argc == 2) { 158 doc.file_name = str_dup(argv[1]);152 doc.file_name = argv[1]; 159 153 } else if (argc > 1) { 160 154 printf("Invalid arguments.\n"); 161 155 return -2; 162 156 } else { 163 doc.file_name = NULL;157 doc.file_name = "/edit.txt"; 164 158 } 165 159 166 160 new_file = false; 167 161 168 if ( doc.file_name == NULL ||file_insert(doc.file_name) != EOK)162 if (file_insert(doc.file_name) != EOK) 169 163 new_file = true; 170 164 … … 176 170 pane_text_display(); 177 171 pane_status_display(); 178 if (new_file && doc.file_name != NULL)179 status_display("File not found. Startingempty file.");172 if (new_file) 173 status_display("File not found. Created empty file."); 180 174 pane_caret_display(); 181 175 … … 272 266 break; 273 267 case KC_S: 274 if (doc.file_name != NULL) 275 file_save(doc.file_name); 276 else 277 file_save_as(); 278 break; 279 case KC_E: 280 file_save_as(); 268 (void) file_save(doc.file_name); 281 269 break; 282 270 default: … … 284 272 } 285 273 } 274 286 275 287 276 /** Save the document. */ … … 296 285 297 286 rc = file_save_range(fname, &sp, &ep); 298 299 switch (rc) { 300 case EINVAL: 301 status_display("Error opening file!"); 302 break; 303 case EIO: 304 status_display("Error writing data!"); 305 break; 306 default: 307 status_display("File saved."); 308 break; 309 } 287 status_display("File saved."); 310 288 311 289 return rc; 312 }313 314 /** Change document name and save. */315 static void file_save_as(void)316 {317 char *old_fname, *fname;318 int rc;319 320 old_fname = (doc.file_name != NULL) ? doc.file_name : "";321 fname = filename_prompt("Save As", old_fname);322 if (fname == NULL) {323 status_display("Save cancelled.");324 return;325 }326 327 rc = file_save(fname);328 if (rc != EOK)329 return;330 331 if (doc.file_name != NULL)332 free(doc.file_name);333 doc.file_name = fname;334 }335 336 /** Ask for a file name. */337 static char *filename_prompt(char const *prompt, char const *init_value)338 {339 console_event_t ev;340 char *str;341 wchar_t buffer[INFNAME_MAX_LEN + 1];342 int max_len;343 int nc;344 bool done;345 346 asprintf(&str, "%s: %s", prompt, init_value);347 status_display(str);348 console_goto(con, 1 + str_length(str), scr_rows - 1);349 free(str);350 351 console_set_color(con, COLOR_WHITE, COLOR_BLACK, 0);352 353 max_len = min(INFNAME_MAX_LEN, scr_columns - 4 - str_length(prompt));354 str_to_wstr(buffer, max_len + 1, init_value);355 nc = wstr_length(buffer);356 done = false;357 358 while (!done) {359 console_get_event(con, &ev);360 361 if (ev.type == KEY_PRESS) {362 /* Handle key press. */363 if (((ev.mods & KM_ALT) == 0) &&364 (ev.mods & KM_CTRL) != 0) {365 ;366 } else if ((ev.mods & (KM_CTRL | KM_ALT)) == 0) {367 switch (ev.key) {368 case KC_ESCAPE:369 return NULL;370 case KC_BACKSPACE:371 if (nc > 0) {372 putchar('\b');373 fflush(stdout);374 --nc;375 }376 break;377 case KC_ENTER:378 done = true;379 break;380 default:381 if (ev.c >= 32 && nc < max_len) {382 putchar(ev.c);383 fflush(stdout);384 buffer[nc++] = ev.c;385 }386 break;387 }388 }389 }390 }391 392 buffer[nc] = '\0';393 str = wstr_to_astr(buffer);394 395 console_set_color(con, COLOR_BLACK, COLOR_WHITE, 0);396 397 return str;398 290 } 399 291 … … 467 359 } while (!spt_equal(&bep, epos)); 468 360 469 if (fclose(f) != EOK) 470 return EIO; 361 fclose(f); 471 362 472 363 return EOK; … … 582 473 spt_t caret_pt; 583 474 coord_t coord; 584 char *fname;585 475 int n; 586 476 … … 588 478 spt_get_coord(&caret_pt, &coord); 589 479 590 fname = (doc.file_name != NULL) ? doc.file_name : "<unnamed>";591 592 480 console_goto(con, 0, scr_rows - 1); 593 481 console_set_color(con, COLOR_WHITE, COLOR_BLACK, 0); 594 n = printf(" %d, %d: File '%s'. Ctrl- Q Quit Ctrl-S Save "595 "Ctrl-E Save As", coord.row, coord.column, fname);482 n = printf(" %d, %d: File '%s'. Ctrl-S Save Ctrl-Q Quit", 483 coord.row, coord.column, doc.file_name); 596 484 printf("%*s", scr_columns - 1 - n, ""); 597 485 fflush(stdout); -
TabularUnified uspace/lib/libc/generic/string.c ¶
r8b5001b rda2bd08 471 471 * null-terminated and containing only complete characters. 472 472 * 473 * @param d est Destination buffer.473 * @param dst Destination buffer. 474 474 * @param count Size of the destination buffer (must be > 0). 475 475 * @param src Source string. … … 505 505 * have to be null-terminated. 506 506 * 507 * @param d est Destination buffer.507 * @param dst Destination buffer. 508 508 * @param count Size of the destination buffer (must be > 0). 509 509 * @param src Source string. … … 537 537 * null-terminated and containing only complete characters. 538 538 * 539 * @param d est Destination buffer.539 * @param dst Destination buffer. 540 540 * @param count Size of the destination buffer. 541 541 * @param src Source string. … … 549 549 } 550 550 551 /** Convert wide string to string. 552 * 553 * Convert wide string @a src to string. The output is written to the buffer 554 * specified by @a dest and @a size. @a size must be non-zero and the string 555 * written will always be well-formed. 556 * 557 * @param dest Destination buffer. 558 * @param size Size of the destination buffer. 559 * @param src Source wide string. 560 */ 561 void wstr_to_str(char *dest, size_t size, const wchar_t *src) 562 { 551 /** Copy NULL-terminated wide string to string 552 * 553 * Copy source wide string @a src to destination buffer @a dst. 554 * No more than @a size bytes are written. NULL-terminator is always 555 * written after the last succesfully copied character (i.e. if the 556 * destination buffer is has at least 1 byte, it will be always 557 * NULL-terminated). 558 * 559 * @param src Source wide string. 560 * @param dst Destination buffer. 561 * @param count Size of the destination buffer. 562 * 563 */ 564 void wstr_nstr(char *dst, const wchar_t *src, size_t size) 565 { 566 /* No space for the NULL-terminator in the buffer */ 567 if (size == 0) 568 return; 569 563 570 wchar_t ch; 564 size_t src_idx; 565 size_t dest_off; 566 567 /* There must be space for a null terminator in the buffer. */ 568 assert(size > 0); 569 570 src_idx = 0; 571 dest_off = 0; 572 571 size_t src_idx = 0; 572 size_t dst_off = 0; 573 573 574 while ((ch = src[src_idx++]) != 0) { 574 if (chr_encode(ch, d est, &dest_off, size - 1) != EOK)575 if (chr_encode(ch, dst, &dst_off, size) != EOK) 575 576 break; 576 577 } 577 578 dest[dest_off] = '\0'; 579 } 580 581 /** Convert wide string to new string. 582 * 583 * Convert wide string @a src to string. Space for the new string is allocated 584 * on the heap. 585 * 586 * @param src Source wide string. 587 * @return New string. 588 */ 589 char *wstr_to_astr(const wchar_t *src) 590 { 591 char dbuf[STR_BOUNDS(1)]; 592 char *str; 593 wchar_t ch; 594 595 size_t src_idx; 596 size_t dest_off; 597 size_t dest_size; 598 599 /* Compute size of encoded string. */ 600 601 src_idx = 0; 602 dest_size = 0; 603 604 while ((ch = src[src_idx++]) != 0) { 605 dest_off = 0; 606 if (chr_encode(ch, dbuf, &dest_off, STR_BOUNDS(1)) != EOK) 607 break; 608 dest_size += dest_off; 609 } 610 611 str = malloc(dest_size + 1); 612 if (str == NULL) 613 return NULL; 614 615 /* Encode string. */ 616 617 src_idx = 0; 618 dest_off = 0; 619 620 while ((ch = src[src_idx++]) != 0) { 621 if (chr_encode(ch, str, &dest_off, dest_size) != EOK) 622 break; 623 } 624 625 str[dest_size] = '\0'; 626 return str; 627 } 628 578 579 if (dst_off >= size) 580 dst[size - 1] = 0; 581 else 582 dst[dst_off] = 0; 583 } 629 584 630 585 /** Convert string to wide string. 631 586 * 632 587 * Convert string @a src to wide string. The output is written to the 633 * buffer specified by @a dest and @a dlen. @a dlen must be non-zero634 * and the wide string writtenwill always be null-terminated.588 * buffer specified by @a dest and @a size, which must have non-zero 589 * size. The output will always be null-terminated. 635 590 * 636 591 * @param dest Destination buffer. -
TabularUnified uspace/lib/libc/include/string.h ¶
r8b5001b rda2bd08 73 73 extern void str_append(char *dest, size_t size, const char *src); 74 74 75 extern void wstr_to_str(char *dest, size_t size, const wchar_t *src); 76 extern char *wstr_to_astr(const wchar_t *src); 75 extern void wstr_nstr(char *dst, const wchar_t *src, size_t size); 77 76 extern void str_to_wstr(wchar_t *dest, size_t dlen, const char *src); 78 77
Note:
See TracChangeset
for help on using the changeset viewer.