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); }
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, ' '); } }
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); }