Esempio n. 1
0
void finalize_tar (char* tarname) {
  FILE* tar;
  tar = fopen(tarname, "rb+");
  fseek(tar, 0, SEEK_END);
  put_padding((EOF_PADDING * 3) - 1, tar);
  fclose(tar);
}
Esempio n. 2
0
static void put_item(struct multilist *list, WINDOW *win, unsigned col,
		     const char *item, int attr)
{
	bool append_sep = true;
	unsigned i;
	size_t len;
	struct multilist_column *col_info;
	bool trim = false;

	SMB_ASSERT(col < list->ncols);
	SMB_ASSERT(item != NULL);

	if (col == list->ncols - 1) {
		append_sep = false;
	}
	col_info = &list->columns[col];

	len = strlen(item);
	if (len > col_info->width) {
		len = col_info->width;
		trim = true;
	}

	if (col_info->align_right) {
		put_padding(win, col_info->width, len);
	}
	for (i = 0; i < len; ++i) {
		if (i == len - 1 && trim) {
			waddch(win, '~' | attr);
		} else {
			waddch(win, item[i] | attr);
		}
	}
	if (!col_info->align_right) {
		put_padding(win, col_info->width, len);
	}

	if (append_sep) {
		waddch(win, ' ');
		waddch(win, '|');
		waddch(win, ' ');
	}
}
Esempio n. 3
0
void p_write_tar_entry (char* tarname, char* filename, int _size, int _modified, int etype) {
  char size[11];
  char psize[11];
  char modified[10];
  char pmodified[10];
  char fm[7];
  char contents[100000];

  dec_to_octal(_size, size);
  padded_octal(size, 11, psize);

  if (etype == 0) {
    strcpy(fm, "0100777");
    dos2unix_str(filename, contents);
  } else if (etype == 5) {
    strcpy(fm, "0040777");
  }
  /*
    * TAR FORMAT SPECIFICATION
    * (a) File name (0-)
    * (b) File mode (100; 8)
    * (c) Owner's numeric user ID (108; 8)
    * (d) Group's numeric user ID (116; 8)
    * (e) File size in bytes (octal) (124; 12)
    * (f) Last modificaton time in numeric Unix time format (octal) (136; 12)
    * (g) Checksum for header record (148; 8)
    * (h) Link indicator (file type) (156; 1)
    * (i) UStar indicator (257; 6)
  */

  FILE* tar;
  tar = fopen(tarname, "wb");
  fwrite(filename, 1, strlen(filename), tar);
  put_padding(100 - strlen(filename), tar);
  fputs(fm, tar);
  put_padding(1, tar);
  fputs("0000000", tar);
  put_padding(1, tar);
  fputs("0000000", tar);
  put_padding(1, tar);
  fputs(psize, tar);
  dec_to_octal(_modified, modified);
  padded_octal(modified, 0, pmodified);
  put_padding(1, tar);
  fputs(pmodified, tar);
  put_padding(1, tar);
  fputs("000000", tar);
  put_padding(1, tar);
  fputs(" ", tar);
  char cetype[2];
  sprintf(cetype, "%d", etype);
  fputs(cetype, tar);
  put_padding(100, tar);
  fputs("ustar", tar);
  put_padding(1, tar);
  fputs("00", tar);
  put_padding(247, tar);
  fwrite(contents, 1, strlen(contents), tar);
  int ps = get_padding(contents);
  put_padding(ps - 1, tar);
  fclose(tar);
}