コード例 #1
0
ファイル: assemble_stats.c プロジェクト: ambarrio/mccortex
static inline void _print_grphwlk_state(const char *str, uint64_t nom,
                                        size_t denom)
{
  char nom_str[100], denom_str[100];
  ulong_to_str(nom, nom_str);
  ulong_to_str(denom, denom_str);
  pad_str(nom_str, ' ', 15);
  pad_str(denom_str, ' ', 15);
  status(PREFIX"  %s: %s / %s\t[ %3zu%% ]", str, nom_str, denom_str,
         !denom ? 0 : (size_t)(((100.0*nom)/denom)+0.5));
}
コード例 #2
0
ファイル: snprintf.c プロジェクト: berkus/JMTK
/* convert - The main conversion function. *format points at a '%'.
   - str contains the output string. The original buffer was 'size' large
     (but *str is the current insert position inside the buffer).
   - *n is the offset inside the output buffer of the current insert position,
     or: (str - start_str).
   - args is an array of arguments passed to snprintf.
   - *thisarg is the next argument to process. */
static const char *convert(char *str, unsigned size, const char *format, int *n, arg_t *args, int *thisarg) {
  pf_state_t s;
  memset((uint8_t*)&s, 0, sizeof(pf_state_t));
  s.precision = 1;
  
  char buf[BUFSZ];

  while (*++format) {
    switch (*format) {

    case '%': /* %% = simple escaped % */
      return cat_char(str, size, n, '%');
    
    case '#': /* Alternate form flag */
      s.alternate_form = 1;
      break;

    case '0': /* Zero pad */
      s.zero_pad = 1;
      break;

    case '-': /* Left justify */
      s.left_justify = 1;
      break;

    case ' ': /* Prefix any positive signed conversion with a space */
      s.pos_sign_prefix_space = 1;
      break;

    case '+': /* Prefix any positive signed conversion with a + */
      s.pos_sign_prefix_plus = 1;
      break;

    case '1': case '2': case '3': case '4': case '5':
    case '6': case '7': case '8': case '9': case '*': {
      /* Number starting with nonzero or '*' is the minimum field width. */
      s.min_field_width = parse_direct_or_indirect_int(&format, args, thisarg);
      break;
    }
    
    case '.': /* Precision */
      ++format;
      s.precision = parse_direct_or_indirect_int(&format, args, thisarg);
      break;
    
    case 'd': case 'i':
      /* If precision is given, zero_pad must be disabled. */
      if (s.precision != 1) s.zero_pad = 0;
      convert_int(buf, BUFSZ, args[(*thisarg)++].i, 10, s, 1);
      pad_str(str, size, n, buf, 1, s, NULL);
      return format+1;
    case 'o':
      /* If precision is given, zero_pad must be disabled. */
      if (s.precision != 1) s.zero_pad = 0;
      convert_int(buf, BUFSZ, args[(*thisarg)++].u, 8, s, 0);
      pad_str(str, size, n, buf, 0, s, s.alternate_form ? "0" : NULL);
      return format+1;
    case 'u':
      /* If precision is given, zero_pad must be disabled. */
      if (s.precision != 1) s.zero_pad = 0;
      convert_int(buf, BUFSZ, (unsigned int)args[(*thisarg)++].i, 10, s, 0);
      pad_str(str, size, n, buf, 0, s, NULL);
      return format+1;
    case 'x':
      /* If precision is given, zero_pad must be disabled. */
      if (s.precision != 1) s.zero_pad = 0;
      convert_int(buf, BUFSZ, args[(*thisarg)++].u, 16, s, 0);
      pad_str(str, size, n, buf, 0, s, s.alternate_form ? "0x" : NULL);
      return format+1;
    case 'X':
      /* If precision is given, zero_pad must be disabled. */
      if (s.precision != 1) s.zero_pad = 0;
      s.transliterate_hex = 1;
      convert_int(buf, BUFSZ, args[(*thisarg)++].u, 16, s, 0);
      pad_str(str, size, n, buf, 0, s, s.alternate_form ? "0X" : NULL);
      return format+1;
    case 'c':
      s.zero_pad = 0;
      buf[0] = (char)args[(*thisarg)++].i;
      buf[1] = '\0';
      pad_str(str, size, n, buf, 0, s, NULL);
      return format+1;
    case 's': {
      s.zero_pad = 0;
      char *in = (char*)args[(*thisarg)++].p;
      if (!in) in = "<null>";
      pad_str(str, size, n, in, 0, s, NULL);
      return format+1;
    }
    case 'p': /* Equivalent to %#x */
      s.zero_pad = 0;
      convert_int(buf, BUFSZ, (uintptr_t)args[(*thisarg)++].p, 16, s, 0);
      pad_str(str, size, n, buf, 0, s, "0x");
      return format+1;
    case 'n': /* Write out the number of arguments converted. */
      s.zero_pad = 0;
      convert_int(buf, BUFSZ, (uintptr_t)*thisarg, 10, s, 0);
      pad_str(str, size, n, buf, 0, s, NULL);
      return format+1;

    case 'e': case 'E':
    case 'f': case 'F':
    case 'g': case 'G':
    case 'a': case 'A':
      pad_str(str, size, n, "???", 0, s, NULL);
      (*thisarg)++;
      return format+1;

    default: /* Shouldn't get here, but we don't have panic available so just try not to infinite loop. */
      return format;
    }
  }
  return format;
}
コード例 #3
0
ファイル: tarino.c プロジェクト: stpettersens/tarino-c
void extract_entry (char* tarname, int i, int overwrite, int verbose, int extract) {
  char filename[100];
  char mode[8];
  char owner[8];
  char group[8];
  char size[12];
  char modified[12];
  char checksum[8];
  char type[1];

  FILE* tar;
  tar = fopen(tarname, "rb");
  fseek(tar, i, SEEK_SET);
  fgets(filename, 99, tar);
  fseek(tar, i + 100, SEEK_SET);
  fgets(mode, 8, tar);
  fseek(tar, i + 108, SEEK_SET);
  fgets(owner, 8, tar);
  fseek(tar, i + 116, SEEK_SET);
  fgets(group, 8, tar);
  fseek(tar, i + 124, SEEK_SET);
  fgets(size, 12, tar);
  fseek(tar, i + 136, SEEK_SET);
  fgets(modified, 12, tar);
  fseek(tar, i + 148, SEEK_SET);
  fgets(checksum, 8, tar);
  fseek(tar, i + 156, SEEK_SET);
  fgets(type, 2, tar);
  char contents[10000];
  fseek(tar, i + 512, SEEK_SET);
  fread(contents, 10000, 1, tar);
  fclose(tar);

  if (verbose == 1 && extract == 1) {
    printf("%s\n", filename);
  }
  else {
    char smodified[25];
    char ssize[12];
    pad_str(size, 12, ssize);
    to_date_time(octal_to_dec(modified), smodified);
    printf("%d    %s      %s    %s\n",
    atoi(mode), ssize, smodified, filename);
  }

  if (strcmp(type, "5") == 0 && extract == 1) {
    char command[1000];
    strcat(command, "mkdir ");
    #ifdef __unix__
    strcat(command, "-p ");
    strcat(command, filename);
    #else
    char wfilename[1000];
    str_replace(filename, '/', '\\', wfilename);
    strcat(command, wfilename);
    if (file_exists(filename) == 0) {
    #endif
      int ec = system(command);
      if (ec == 1) {
        printf("tarino-native: Exit code from system call was 1.\n");
      }
    #ifndef __unix__
    }
    #endif
    memset(command, 0, strlen(command));
  }

  if (strcmp(type, "0") == 0 && extract == 1) {
    if (overwrite == 1 || file_exists(filename) == 1) {
      FILE* out;
      out = fopen(filename, "wb");
      int length = strlen(contents);
      if (strstr(filename, ".gif") != 0) {
        length = get_gif_length(contents);
      }
      if (strstr(filename, ".png") != 0) {
        length = get_png_length(contents);
      }
      fwrite(contents, length, 1, out);
      fclose(out);
    }
  }
}