Beispiel #1
0
int vprintf (char* fmt_, va_list args_) {
  for (int i = 0; fmt_[i] != '\0'; i++) {
    if (fmt_[i] == '%') {
      union u_size u;
      u.l = va_arg(args_, unsigned long);
      switch (fmt_[i+1]) {
        case 'd':{
          putint_i(u.i,10);
          }break;
        case 'i': {
          putint_i(u.i,10);
          }break;
        case 's':{
          putc_s (u.p);
          }break;
        case 'c':{
          putc_i (u.c);
          }break;
        case 'x':{
          putc_s("0x");
          putint_i(u.u,16);
          }break;
      }

      i++;
    } else {
      putc_i (fmt_[i]);
    }
  }
Beispiel #2
0
int puts_in(char *s, char **buffer, size_t *len) {
    int res = 0;
    for (int i = 0; s[i] != 0; ++i) {
        if (putc_s(s[i], buffer, len)) {
            ++res;
        } else {
            break;
        }
    }
    return res;
}
Beispiel #3
0
int print_int(int64_t x, char **buffer, size_t *len) {
    if (x == LLONG_MIN) {
        return puts_in("-9223372036854775808", buffer, len);
    }
    int res = 0;
    if (x < 0) {
        if (putc_s('-', buffer, len)) {
            ++res;
        }
        x = -x;
    }
    return res + print_uint(x, 10, buffer, len);
}
Beispiel #4
0
int print_uint(uint64_t x, int base, char **buffer, size_t *len) {
    static char buff[30];
    if (x == 0) {
        return puts_in("0", buffer, len);
    }
    int i = 0;
    int res = 0;
    for (; x != 0; ++i) {
        buff[i] = x % base + '0';
        if (buff[i] > 9 + '0') {
            buff[i] = buff[i] - '0' - 10 + 'a';
        }
        x /= base;
    }
    for (int j = i - 1; j >= 0; --j) {
        if (putc_s(buff[j], buffer, len)) {
            ++res;
        } else {
            break;
        }
    }
    return res;
}