Compare commits
2 Commits
master
...
a8-alt-sol
Author | SHA1 | Date | |
---|---|---|---|
9752ef451f | |||
42cb09f3bd |
@ -75,30 +75,36 @@ void destroyDiskQueue(DiskQueue *queue) {
|
|||||||
free(queue);
|
free(queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
int calcDistance(int position, int destination) {
|
|
||||||
if (position > destination) {
|
|
||||||
return destination + (9999 + 1 - position);
|
|
||||||
} else {
|
|
||||||
return destination - position;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DiskRequest* findClosest(DiskQueue *queue, int position, double time) {
|
DiskRequest* findClosest(DiskQueue *queue, int position, double time) {
|
||||||
DiskRequest *current = queue->head;
|
DiskRequest *current = queue->head;
|
||||||
DiskRequest *closest = NULL;
|
DiskRequest *next = NULL;
|
||||||
|
DiskRequest *first = NULL;
|
||||||
while (current != NULL) {
|
while (current != NULL) {
|
||||||
if (current->time <= time) { // Filter out requests that haven't come in yet
|
if (current->time <= time) { // Filter out requests that haven't come in yet
|
||||||
if (closest == NULL) { // If there is no closest yet, set it to the current
|
if (first == NULL) {
|
||||||
closest = current;
|
first = current;
|
||||||
} else {
|
} else {
|
||||||
int closestDistance = calcDistance(position, closest->position); // Distance from the closest to the current position, negative means down (bad)
|
if (current->position < first->position) {
|
||||||
int currentDistance = calcDistance(position, current->position); // Distance from the current to the current position, negative means down (bad
|
first = current;
|
||||||
if (currentDistance < closestDistance) { // If the current is closer than the closest
|
}
|
||||||
closest = current;
|
}
|
||||||
|
int currentDistance = current->position - position; // Distance from the current to the current position, negative means down (bad)
|
||||||
|
if (currentDistance > 0) { // If the current is up
|
||||||
|
if (next == NULL) { // If there is no next yet, set it to the current
|
||||||
|
next = current;
|
||||||
|
} else {
|
||||||
|
int nextDistance = next->position - position; // Distance from the next to the current position, negative means down (bad)
|
||||||
|
if (currentDistance < nextDistance) { // If the current is closer than the next
|
||||||
|
next = current;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
current = current->next;
|
current = current->next;
|
||||||
}
|
}
|
||||||
return closest;
|
// If we didn't find a request that is above the current position, return the first as a fallback
|
||||||
|
if (next == NULL) {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
return next;
|
||||||
}
|
}
|
@ -26,5 +26,3 @@ DiskRequest *dequeue(DiskQueue *queue);
|
|||||||
DiskRequest *findClosest(DiskQueue *queue, int position, double time);
|
DiskRequest *findClosest(DiskQueue *queue, int position, double time);
|
||||||
|
|
||||||
void destroyDiskQueue(DiskQueue *queue);
|
void destroyDiskQueue(DiskQueue *queue);
|
||||||
|
|
||||||
int calcDistance(int position, int destination);
|
|
||||||
|
Binary file not shown.
8
Assignment9/.idea/.gitignore
vendored
8
Assignment9/.idea/.gitignore
vendored
@ -1,8 +0,0 @@
|
|||||||
# Default ignored files
|
|
||||||
/shelf/
|
|
||||||
/workspace.xml
|
|
||||||
# Editor-based HTTP Client requests
|
|
||||||
/httpRequests/
|
|
||||||
# Datasource local storage ignored files
|
|
||||||
/dataSources/
|
|
||||||
/dataSources.local.xml
|
|
@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="CMakeSharedSettings">
|
|
||||||
<configurations>
|
|
||||||
<configuration PROFILE_NAME="Debug" ENABLED="true" GENERATION_DIR="build" CONFIG_NAME="Debug" />
|
|
||||||
</configurations>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
@ -1,4 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
|
|
||||||
</project>
|
|
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectModuleManager">
|
|
||||||
<modules>
|
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/Assignment9.iml" filepath="$PROJECT_DIR$/.idea/Assignment9.iml" />
|
|
||||||
</modules>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
@ -1,8 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="All CTest" type="CTestRunConfiguration" factoryName="CTestRun" PROGRAM_PARAMS="--extra-verbose" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentLocalGenerationDir$" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_PATH="$CTestCurrentExecutableName$" EXPLICIT_BUILD_TARGET_NAME="all" TEST_MODE="PATTERN">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
<option name="BeforeTestRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,7 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Assignment9" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,7 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Test1" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test1.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,7 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Test2" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test2.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,7 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Test3" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test3.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,7 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Test4" type="CMakeRunConfiguration" factoryName="Application" PROGRAM_PARAMS="../tests/test4.png" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,10 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="Test All" type="CMakeRunConfiguration" factoryName="Application" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" PASS_PARENT_ENVS_2="true" PROJECT_NAME="Assignment9" TARGET_NAME="Assignment9" CONFIG_NAME="Debug" RUN_TARGET_PROJECT_NAME="Assignment9" RUN_TARGET_NAME="Assignment9">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
<option name="RunConfigurationTask" enabled="false" run_configuration_name="Test1" run_configuration_type="CMakeRunConfiguration" />
|
|
||||||
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Test3" run_configuration_type="CMakeRunConfiguration" />
|
|
||||||
<option name="RunConfigurationTask" enabled="true" run_configuration_name="Test4" run_configuration_type="CMakeRunConfiguration" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,8 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="images" type="CTestRunConfiguration" factoryName="CTestRun" PROGRAM_PARAMS="--extra-verbose" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentLocalGenerationDir$" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_PATH="$CTestCurrentExecutableName$" EXPLICIT_BUILD_TARGET_NAME="all" TEST_METHOD="images" TEST_MODE="SUITE_TEST">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
<option name="BeforeTestRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,8 +0,0 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration default="false" name="output" type="CTestRunConfiguration" factoryName="CTestRun" PROGRAM_PARAMS="--extra-verbose" REDIRECT_INPUT="false" ELEVATE="false" USE_EXTERNAL_CONSOLE="false" EMULATE_TERMINAL="false" WORKING_DIR="file://$CMakeCurrentLocalGenerationDir$" PASS_PARENT_ENVS_2="true" CONFIG_NAME="Debug" RUN_PATH="$CTestCurrentExecutableName$" EXPLICIT_BUILD_TARGET_NAME="all" TEST_METHOD="output" TEST_MODE="SUITE_TEST">
|
|
||||||
<method v="2">
|
|
||||||
<option name="com.jetbrains.cidr.execution.CidrBuildBeforeRunTaskProvider$BuildBeforeRunTask" enabled="true" />
|
|
||||||
<option name="BeforeTestRunTask" enabled="true" />
|
|
||||||
</method>
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
@ -1,10 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.20)
|
|
||||||
project(Assignment9 C)
|
|
||||||
set(CMAKE_C_STANDARD 99)
|
|
||||||
add_executable(Assignment9 src/main.c
|
|
||||||
src/png.c
|
|
||||||
src/png.h)
|
|
||||||
|
|
||||||
enable_testing()
|
|
||||||
add_test(NAME output COMMAND test_text.sh WORKING_DIRECTORY ../tests)
|
|
||||||
add_test(NAME images COMMAND test_images.sh WORKING_DIRECTORY ../tests)
|
|
Binary file not shown.
@ -1,68 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
// FILE format is: 'header', then 2023 skipped bytes, then the number of interest
|
|
||||||
#define OURINT 1426915328
|
|
||||||
#define OFFSETTODATA 2023
|
|
||||||
|
|
||||||
int writeToFile(){
|
|
||||||
|
|
||||||
FILE* fp = fopen("toReadLater.txt","w+");
|
|
||||||
char c = 'h';
|
|
||||||
fwrite(&c, sizeof(char), 1, fp);
|
|
||||||
c = 'e';
|
|
||||||
fwrite(&c, sizeof(char), 1, fp);
|
|
||||||
c = 'a';
|
|
||||||
fwrite(&c, sizeof(char), 1, fp);
|
|
||||||
c = 'd';
|
|
||||||
fwrite(&c, sizeof(char), 1, fp);
|
|
||||||
c = 'e';
|
|
||||||
fwrite(&c, sizeof(char), 1, fp);
|
|
||||||
c = 'r';
|
|
||||||
fwrite(&c, sizeof(char), 1, fp);
|
|
||||||
unsigned int buf = OFFSETTODATA;
|
|
||||||
fwrite(&buf, sizeof(int), 1, fp);
|
|
||||||
fseek(fp, OFFSETTODATA, SEEK_CUR);
|
|
||||||
|
|
||||||
buf = OURINT;
|
|
||||||
fwrite(&buf, sizeof(int), 1, fp);
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
int readFromFile(){
|
|
||||||
FILE *fp = fopen("toReadLater.txt", "r+");
|
|
||||||
fseek(fp, 6 , SEEK_SET);
|
|
||||||
int skip = 0;
|
|
||||||
fread(&skip, sizeof(int), 1, fp);
|
|
||||||
// NOTE, in HW, the size of the section is a value in
|
|
||||||
// Big-Endian format, it will actually need conversion
|
|
||||||
fseek(fp, skip, SEEK_CUR);
|
|
||||||
unsigned int qBe = 0;
|
|
||||||
unsigned int qLe = 0;
|
|
||||||
int i;
|
|
||||||
unsigned char *c = (char *)(&qBe);
|
|
||||||
unsigned char *d = (char *)(&qLe);
|
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
c[i] = getc(fp);
|
|
||||||
printf("Byte %i: %i %x\n",i, c[i], c[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
|
||||||
{
|
|
||||||
d[4-i-1] = c[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("Translated using swapping the bytes order: %i\n", qLe);
|
|
||||||
qLe = ntohl(qBe);
|
|
||||||
printf("Translated using ntohl: %i\n", qLe);
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
||||||
int main (int argc, char** argv){
|
|
||||||
unsigned int wantToRead;
|
|
||||||
writeToFile();
|
|
||||||
printf("Sizeof (int) is:%li\n", sizeof(unsigned int));
|
|
||||||
readFromFile();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
Binary file not shown.
@ -1,50 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "png.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
|
||||||
// Error handling
|
|
||||||
if (argc != 2) {
|
|
||||||
printf("Usage: %s <png file>\n", argv[0]);
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
if (strlen(argv[1]) > PATH_MAX) {
|
|
||||||
printf("Path too long\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
// Read file
|
|
||||||
char *path = argv[1];
|
|
||||||
char *png_buffer = load_file(path);
|
|
||||||
if (!is_png(png_buffer)) {
|
|
||||||
printf("It's not a PNG file\n");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
} else {
|
|
||||||
printf("It's a PNG file\n");
|
|
||||||
}
|
|
||||||
png_chunk **chunks = get_png_chunks(png_buffer);
|
|
||||||
free(png_buffer);
|
|
||||||
// Done with buffer, as chunks are a structured way to access the data
|
|
||||||
// Iterate over chunks to display info and "decrypt" IDAT chunks
|
|
||||||
int size = get_number_of_chunks(chunks);
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
// Check if header is IDAT or IEND
|
|
||||||
bool is_idat = memcmp(chunks[i]->type, "IDAT", 4) == 0;
|
|
||||||
bool is_iend = memcmp(chunks[i]->type, "IEND", 4) == 0;
|
|
||||||
if (is_idat || is_iend) {
|
|
||||||
printf("Found %.4s\n", chunks[i]->type);
|
|
||||||
if (is_idat) {
|
|
||||||
xor_data(chunks[i]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
printf("Found unknown: %.4s\n", chunks[i]->type);
|
|
||||||
}
|
|
||||||
printf("Chunk size is:%d\n", chunks[i]->length);
|
|
||||||
}
|
|
||||||
// Write file and free memory
|
|
||||||
write_png_chunks(path, chunks);
|
|
||||||
destroy_chunks(chunks);
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
@ -1,159 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright Notice
|
|
||||||
* ----------------
|
|
||||||
* Copyright © 1998, 1999 by: Glenn Randers-Pehrson
|
|
||||||
* This specification is a modification of the PNG 1.0 specification. It is being
|
|
||||||
* provided by the copyright holder under the provisions of the 1996 MIT copyright and license:
|
|
||||||
* Copyright © 1996 by: Massachusetts Institute of Technology (MIT)
|
|
||||||
* This W3C specification is being provided by the copyright holders under
|
|
||||||
* the following license. By obtaining, using and/or copying this specification, you
|
|
||||||
* agree that you have read, understood, and will comply with the following terms
|
|
||||||
* and conditions:
|
|
||||||
* Permission to use, copy, and distribute this specification for any purpose
|
|
||||||
* and without fee or royalty is hereby granted, provided that the full text of
|
|
||||||
* this NOTICE appears on ALL copies of the specification or portions thereof,
|
|
||||||
* including modifications, that you make.
|
|
||||||
* THIS SPECIFICATION IS PROVIDED ”AS IS,” AND COPYRIGHT HOLD-ERS
|
|
||||||
* MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
|
||||||
* IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT
|
|
||||||
* HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY
|
|
||||||
* OR FITNESS FOR ANY PARTICULAR PURPOSE OR
|
|
||||||
* THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY
|
|
||||||
* THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER
|
|
||||||
* RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY
|
|
||||||
* USE OF THIS SPECIFICATION.
|
|
||||||
* The name and trademarks of copyright holders may NOT be used in
|
|
||||||
* advertising or publicity pertaining to the specification without specific, written
|
|
||||||
* prior permission. Title to copyright in this specification and any associated
|
|
||||||
* documentation will at all times remain with copyright holders.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "png.h"
|
|
||||||
|
|
||||||
FILE *get_file(char *path) {
|
|
||||||
FILE *fp = fopen(path, "rb");
|
|
||||||
if (fp == NULL) {
|
|
||||||
perror("fopen");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
return fp;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *load_file(char *path) {
|
|
||||||
FILE *fp = get_file(path);
|
|
||||||
fseek(fp, 0, SEEK_END);
|
|
||||||
long size = ftell(fp);
|
|
||||||
rewind(fp);
|
|
||||||
char *buffer = malloc(size);
|
|
||||||
if (buffer == NULL) {
|
|
||||||
perror("malloc");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
fread(buffer, 1, size, fp);
|
|
||||||
fclose(fp);
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
int is_png(char *buffer) {
|
|
||||||
return memcmp(buffer, PNG_SIGNATURE, PNG_SIGNATURE_SIZE) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
png_chunk *get_png_chunk(char *buffer, unsigned int offset) {
|
|
||||||
png_chunk *chunk = malloc(sizeof(png_chunk));
|
|
||||||
if (chunk == NULL) {
|
|
||||||
perror("malloc");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
memcpy(&chunk->length, buffer + offset + 0, 4);
|
|
||||||
// Convert length to host byte order because PNG lengths is in network byte order/Big Endian
|
|
||||||
chunk->length = ntohl(chunk->length);
|
|
||||||
memcpy(&chunk->type, buffer + offset + 4, 4);
|
|
||||||
chunk->data = malloc(chunk->length);
|
|
||||||
if (chunk->data == NULL) {
|
|
||||||
perror("malloc");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
memcpy(chunk->data, buffer + offset + 8, chunk->length);
|
|
||||||
memcpy(&chunk->crc, buffer + offset + 8 + chunk->length, 4);
|
|
||||||
return chunk;
|
|
||||||
}
|
|
||||||
|
|
||||||
png_chunk **get_png_chunks(char *buffer) {
|
|
||||||
png_chunk **chunks = malloc(sizeof(png_chunk *));
|
|
||||||
if (chunks == NULL) {
|
|
||||||
perror("malloc");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
// Running offset of the buffer
|
|
||||||
unsigned int offset = PNG_SIGNATURE_SIZE;
|
|
||||||
// Index of the current chunk
|
|
||||||
int i = 0;
|
|
||||||
while (true) {
|
|
||||||
chunks[i] = get_png_chunk(buffer, offset);
|
|
||||||
// 12 = 4 (length) + 4 (type) + 4 (crc)
|
|
||||||
offset += 12 + chunks[i]->length;
|
|
||||||
if (memcmp(chunks[i]->type, "IEND", 4) == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
// Add one because realloc is 1-indexed when multiplying by sizeof
|
|
||||||
png_chunk **err_check = realloc(chunks, sizeof(png_chunk *) * (i + 1));
|
|
||||||
if (err_check == NULL) {
|
|
||||||
destroy_chunks(chunks);
|
|
||||||
perror("realloc");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
chunks = err_check;
|
|
||||||
}
|
|
||||||
return chunks;
|
|
||||||
}
|
|
||||||
|
|
||||||
int get_number_of_chunks(png_chunk **chunks) {
|
|
||||||
int i = 0;
|
|
||||||
while (memcmp(chunks[i]->type, "IEND", 4) != 0) {
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
// Add one for the IEND chunk
|
|
||||||
return ++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
void xor_data(png_chunk *chunk) {
|
|
||||||
for (int i = 0; i < chunk->length; i++) {
|
|
||||||
chunk->data[i] ^= KEY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void destroy_chunks(png_chunk **chunks) {
|
|
||||||
unsigned int size = get_number_of_chunks(chunks);
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
free(chunks[i]->data);
|
|
||||||
free(chunks[i]);
|
|
||||||
}
|
|
||||||
free(chunks);
|
|
||||||
}
|
|
||||||
|
|
||||||
void write_png_chunks(char *path, png_chunk **chunks) {
|
|
||||||
FILE *fp = fopen(path, "wb");
|
|
||||||
if (fp == NULL) {
|
|
||||||
perror("fopen");
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
fwrite(PNG_SIGNATURE, PNG_SIGNATURE_SIZE, 1, fp);
|
|
||||||
unsigned int size = get_number_of_chunks(chunks);
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
// Convert length to network byte order for writing
|
|
||||||
chunks[i]->length = htonl(chunks[i]->length);
|
|
||||||
fwrite(&chunks[i]->length, 4, 1, fp);
|
|
||||||
fwrite(chunks[i]->type, 4, 1, fp);
|
|
||||||
// Convert back so we can accurately use it to write the length of the data
|
|
||||||
chunks[i]->length = ntohl(chunks[i]->length);
|
|
||||||
fwrite(chunks[i]->data, chunks[i]->length, 1, fp);
|
|
||||||
fwrite(&chunks[i]->crc, 4, 1, fp);
|
|
||||||
}
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright Notice
|
|
||||||
* ----------------
|
|
||||||
* Copyright © 1998, 1999 by: Glenn Randers-Pehrson
|
|
||||||
* This specification is a modification of the PNG 1.0 specification. It is being
|
|
||||||
* provided by the copyright holder under the provisions of the 1996 MIT copyright and license:
|
|
||||||
* Copyright © 1996 by: Massachusetts Institute of Technology (MIT)
|
|
||||||
* This W3C specification is being provided by the copyright holders under
|
|
||||||
* the following license. By obtaining, using and/or copying this specification, you
|
|
||||||
* agree that you have read, understood, and will comply with the following terms
|
|
||||||
* and conditions:
|
|
||||||
* Permission to use, copy, and distribute this specification for any purpose
|
|
||||||
* and without fee or royalty is hereby granted, provided that the full text of
|
|
||||||
* this NOTICE appears on ALL copies of the specification or portions thereof,
|
|
||||||
* including modifications, that you make.
|
|
||||||
* THIS SPECIFICATION IS PROVIDED ”AS IS,” AND COPYRIGHT HOLD-ERS
|
|
||||||
* MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
|
||||||
* IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT
|
|
||||||
* HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY
|
|
||||||
* OR FITNESS FOR ANY PARTICULAR PURPOSE OR
|
|
||||||
* THAT THE USE OF THE SPECIFICATION WILL NOT INFRINGE ANY
|
|
||||||
* THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER
|
|
||||||
* RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY
|
|
||||||
* USE OF THIS SPECIFICATION.
|
|
||||||
* The name and trademarks of copyright holders may NOT be used in
|
|
||||||
* advertising or publicity pertaining to the specification without specific, written
|
|
||||||
* prior permission. Title to copyright in this specification and any associated
|
|
||||||
* documentation will at all times remain with copyright holders.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
// Needed for uint types
|
|
||||||
#include <arpa/inet.h>
|
|
||||||
|
|
||||||
// http://www.libpng.org/pub/png/spec/1.2/PNG-Rationale.html#R.PNG-file-signature
|
|
||||||
#define PNG_SIGNATURE "\211PNG\r\n\032\n"
|
|
||||||
#define PNG_SIGNATURE_SIZE 8
|
|
||||||
|
|
||||||
// The key used to "encrypt/decrypt" the PNG chunks
|
|
||||||
#define KEY 42
|
|
||||||
|
|
||||||
typedef struct png_chunk {
|
|
||||||
uint32_t length;
|
|
||||||
char type[4];
|
|
||||||
char *data;
|
|
||||||
uint32_t crc;
|
|
||||||
} png_chunk;
|
|
||||||
|
|
||||||
// Get FILE from path
|
|
||||||
int get_fd(char *path);
|
|
||||||
|
|
||||||
// Store file in heap memory
|
|
||||||
char *load_file(char *path);
|
|
||||||
|
|
||||||
// Check if file is a PNG
|
|
||||||
int is_png(char *buffer);
|
|
||||||
|
|
||||||
// Get PNG chunk
|
|
||||||
png_chunk *get_png_chunk(char *buffer, unsigned int offset);
|
|
||||||
|
|
||||||
// Get all PNG chunks
|
|
||||||
png_chunk **get_png_chunks(char *buffer);
|
|
||||||
|
|
||||||
// Get number of chunks
|
|
||||||
int get_number_of_chunks(png_chunk **chunks);
|
|
||||||
|
|
||||||
// XOR chunk with key
|
|
||||||
void xor_data(png_chunk *chunk);
|
|
||||||
|
|
||||||
// Destroy all chunks
|
|
||||||
void destroy_chunks(png_chunk **chunks);
|
|
||||||
|
|
||||||
// Write PNG chunks to file
|
|
||||||
void write_png_chunks(char *path, png_chunk **chunks);
|
|
Binary file not shown.
@ -1,13 +0,0 @@
|
|||||||
It's a PNG file
|
|
||||||
Found unknown: IHDR
|
|
||||||
Chunk size is:13
|
|
||||||
Found unknown: sRGB
|
|
||||||
Chunk size is:1
|
|
||||||
Found unknown: gAMA
|
|
||||||
Chunk size is:4
|
|
||||||
Found unknown: pHYs
|
|
||||||
Chunk size is:9
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:18944
|
|
||||||
Found IEND
|
|
||||||
Chunk size is:0
|
|
@ -1 +0,0 @@
|
|||||||
It's not a PNG file
|
|
@ -1,249 +0,0 @@
|
|||||||
It's a PNG file
|
|
||||||
Found unknown: IHDR
|
|
||||||
Chunk size is:13
|
|
||||||
Found unknown: sRGB
|
|
||||||
Chunk size is:1
|
|
||||||
Found unknown: gAMA
|
|
||||||
Chunk size is:4
|
|
||||||
Found unknown: pHYs
|
|
||||||
Chunk size is:9
|
|
||||||
Found unknown: tEXt
|
|
||||||
Chunk size is:15
|
|
||||||
Found unknown: tIME
|
|
||||||
Chunk size is:7
|
|
||||||
Found unknown: tEXt
|
|
||||||
Chunk size is:32
|
|
||||||
Found unknown: tEXt
|
|
||||||
Chunk size is:33
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65310
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:17176
|
|
||||||
Found IEND
|
|
||||||
Chunk size is:0
|
|
@ -1,317 +0,0 @@
|
|||||||
It's a PNG file
|
|
||||||
Found unknown: IHDR
|
|
||||||
Chunk size is:13
|
|
||||||
Found unknown: sRGB
|
|
||||||
Chunk size is:1
|
|
||||||
Found unknown: gAMA
|
|
||||||
Chunk size is:4
|
|
||||||
Found unknown: pHYs
|
|
||||||
Chunk size is:9
|
|
||||||
Found unknown: tEXt
|
|
||||||
Chunk size is:15
|
|
||||||
Found unknown: tIME
|
|
||||||
Chunk size is:7
|
|
||||||
Found unknown: tEXt
|
|
||||||
Chunk size is:32
|
|
||||||
Found unknown: tEXt
|
|
||||||
Chunk size is:33
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65310
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:65524
|
|
||||||
Found IDAT
|
|
||||||
Chunk size is:53390
|
|
||||||
Found IEND
|
|
||||||
Chunk size is:0
|
|
Binary file not shown.
Before Width: | Height: | Size: 19 KiB |
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 7.1 MiB |
Binary file not shown.
Before Width: | Height: | Size: 9.3 MiB |
@ -1,22 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Executable path
|
|
||||||
EXECUTABLE=../build/Assignment9
|
|
||||||
|
|
||||||
|
|
||||||
test_reverse() {
|
|
||||||
start=$(date +%s)
|
|
||||||
cp "$1" in.png
|
|
||||||
cp in.png out.png
|
|
||||||
$EXECUTABLE out.png > /dev/null
|
|
||||||
$EXECUTABLE out.png > /dev/null
|
|
||||||
diff in.png out.png
|
|
||||||
rm in.png out.png
|
|
||||||
end=$(date +%s)
|
|
||||||
echo "Test $1 took $((end - start)) seconds"
|
|
||||||
}
|
|
||||||
|
|
||||||
test_reverse test1.png
|
|
||||||
# test_reverse test2.png # This png is invalid, so it will fail
|
|
||||||
test_reverse test3.png
|
|
||||||
test_reverse test4.png
|
|
@ -1,18 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
EXECUTABLE=../build/Assignment9
|
|
||||||
|
|
||||||
# Test the text output
|
|
||||||
$EXECUTABLE test1.png | diff output1.txt -
|
|
||||||
$EXECUTABLE test2.png | diff output2.txt -
|
|
||||||
$EXECUTABLE test3.png | diff output3.txt -
|
|
||||||
$EXECUTABLE test4.png | diff output4.txt -
|
|
||||||
|
|
||||||
|
|
||||||
# Reverse the images
|
|
||||||
$EXECUTABLE test1.png > /dev/null
|
|
||||||
$EXECUTABLE test2.png > /dev/null
|
|
||||||
$EXECUTABLE test3.png > /dev/null
|
|
||||||
$EXECUTABLE test4.png > /dev/null
|
|
||||||
|
|
||||||
echo "If there is no diff output, then the test passed."
|
|
Loading…
Reference in New Issue
Block a user