Ignore:
Timestamp:
2009-06-03T19:26:28Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d00ae4c
Parents:
ca3ba3a
Message:

I/O subsystem overhaul:

  • add more POSIX-like file and stream functions (with real functionality of stdin, stdout, stderr)
  • cleanup console access methods (now generic to any console-like device)
  • remove unsafe stream functions
  • add special open_node(), fd_node(), fd_phone() (file) and fopen_node(), fnode(), fphone() (stream) functions for HelenOS-specific I/O operations
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/libc/generic/io/asprintf.c

    rca3ba3a r2595dab  
    3737#include <stdio.h>
    3838#include <stdlib.h>
     39#include <string.h>
    3940#include <io/printf_core.h>
    4041
    41 static int asprintf_prewrite(const char *str, size_t count, void *unused)
     42static int asprintf_str_write(const char *str, size_t count, void *unused)
    4243{
    43         return count;
     44        return str_nlength(str, count);
     45}
     46
     47static int asprintf_wstr_write(const wchar_t *str, size_t count, void *unused)
     48{
     49        return wstr_nlength(str, count);
    4450}
    4551
    4652/** Allocate and print to string.
    4753 *
    48  * @param strp          Address of the pointer where to store the address of
    49  *                      the newly allocated string.
    50  * @fmt                 Format strin.
     54 * @param strp Address of the pointer where to store the address of
     55 *             the newly allocated string.
     56 * @fmt        Format string.
    5157 *
    52  * @return              Number of characters printed or a negative error code.
     58 * @return Number of characters printed or a negative error code.
     59 *
    5360 */
    5461int asprintf(char **strp, const char *fmt, ...)
    5562{
    5663        struct printf_spec ps = {
    57                  asprintf_prewrite,
    58                  NULL
     64                asprintf_str_write,
     65                asprintf_wstr_write,
     66                NULL
    5967        };
    60         int ret;
     68       
    6169        va_list args;
    62 
    6370        va_start(args, fmt);
    64         ret = printf_core(fmt, &ps, args);
     71       
     72        int ret = printf_core(fmt, &ps, args);
    6573        va_end(args);
     74       
    6675        if (ret > 0) {
    67                 *strp = malloc(ret + 20);
    68                 if (!*strp)
     76                *strp = malloc(STR_BOUNDS(ret) + 1);
     77                if (*strp == NULL)
    6978                        return -1;
     79               
    7080                va_start(args, fmt);
    71                 vsprintf(*strp, fmt, args);
    72                 va_end(args);           
     81                vsnprintf(*strp, STR_BOUNDS(ret) + 1, fmt, args);
     82                va_end(args);
    7383        }
    74 
     84       
    7585        return ret;
    7686}
Note: See TracChangeset for help on using the changeset viewer.