Exemple #1
0
void printf_header_info(FILE_HEADER* header) {
	if(header->typeflag[0] == '5')
		printf("d");
	else if(header->typeflag[0] == '1')
		printf("l");
	else
		printf("-");

    printf("%s", get_rights(header->mode[4]));
    printf("%s", get_rights(header->mode[5]));
    printf("%s", get_rights(header->mode[6]));
    printf(" %s %s ", header->uname, header->gname);
    printf("%*s ", 7, get_weight(oct2dec(header->size)));
    // The following expression permits to cut the final '\n' character
    printf("%.*s%s", 24, get_asc_date(oct2dec(header->mtime)), 
    					&get_asc_date(oct2dec(header->mtime))[25]);
    printf(" %s%s\n", header->prefix, header->name);
}
Exemple #2
0
int main(int argc, char *argv[])
{
	char oct[6];
	int i;
	int dec;

	i = 0;
	while((oct[i++] = getchar()) != '\n');

	dec = oct2dec(oct);
	oct[--i] = '\0';
	printf("0x%s = %d\n", oct, dec);

	return 0;
}
Exemple #3
0
void create_archive_from_files(int number_of_arguments, char** files) {
	FILE* archive = NULL;
	int i = first_argument_position;
	errno = 0;

	// If the user wants to create the archive file so the first argument is
	// the name of the archive.
	if(MAKE_ARCHIVE_FLAG) {
		archive = fopen(files[first_argument_position], "w");
		
		if(archive == NULL && errno != 0)
			goto error;

		i++;
	}

	do {
		errno = 0;
		FILE* current_file = fopen(files[i], "r");

		if(current_file == NULL && errno != 0)
			goto error;
		
		FILE_HEADER header;
		build_ustar_header_from_file(&header, files[i]);
		size_t filesize = oct2dec(header.size);
		char* buffer = malloc(filesize);
		memset(buffer, 0, filesize);

		fread(buffer, filesize, 1, current_file);

		if(MAKE_ARCHIVE_FLAG) {
			write_header_to_archive(&header, archive);
			fwrite(buffer, filesize, 1, archive);

			unsigned int space_needed = calculate_number_of_block(filesize);
			space_needed *= BLOCK_SIZE;
			
			complete_current_block(filesize, space_needed, archive);

			if(VERBOSE_FLAG)
				printf("'%s' a été archivé.\n", files[i]);
		}
		else {
			printf_header(&header);
			printf("%.*s\n", (int)filesize, buffer);
		}

		free(buffer);
		buffer = NULL;

		fclose(current_file);
		current_file = NULL;

		i++;
	} while(i < number_of_arguments);

	// Write an ending null block at the end of the archive
	if(MAKE_ARCHIVE_FLAG) {
		write_null_block(archive);
		fclose(archive);
		archive = NULL;
	}

// Here is a jump in case of an error during opening the archive
error:
	// Avoid a wrong error display at the end of the function
	if(i != number_of_arguments)
		fprintf(stderr, "%s '%s' : %s\n", OPENING_ERR, files[i],
															strerror(errno));
}