summaryrefslogtreecommitdiff
path: root/user/inflate.c
blob: 2f7a3d6f32b157f084bad946fcbf190c23afbe1d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <stdio.h>
#include <stdbool.h>

int main(int argc, char **argv)
{
	FILE *in, *out;
	int length, value;

	if (argc != 3) {
		fprintf(stderr, "usage: inflate in out\n");
		return 1;
	}

	in = fopen(argv[1], "rb");
	if (in == NULL) {
		fprintf(stderr, "cannot read: %s\n", argv[1]);
		return 1;
	}

	out = fopen(argv[2], "wb");
	if (out == NULL) {
		fprintf(stderr, "cannot write %s\n", argv[2]);
		return 1;
	}

	while (1) {
		length = getc(in);
		value = getc(in);

		if (length == EOF)
			break;

		if (value == EOF)
			return 1;

		for (int i = 0; i < length; i++)
			putc(value, out);
	}

	return 0;
}