Subversion Repositories freemyipod

Rev

Rev 447 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 447 Rev 450
Line 1... Line 1...
1
/*
1
/*
2
 * Helper functions to handle compression via zlib
2
 * Helper functions to handle compression via UCL
-
 
3
 *
-
 
4
 * Copyright (C) 2011 Michael Sparmann
-
 
5
 *
-
 
6
 * Based on: Helper functions to handle compression via zlib
3
 *
7
 *
4
 * Copyright (C) 2007-2008 Julian Brown
8
 * Copyright (C) 2007-2008 Julian Brown
5
 * Copyright (C) 2008 Mike Frysinger
9
 * Copyright (C) 2008 Mike Frysinger
6
 *
10
 *
7
 * Licensed under the GPL-2 or later.
11
 * Licensed under the GPL-2 or later.
Line 101... Line 105...
101
		case COMPRESSED:
105
		case COMPRESSED:
102
        {
106
        {
103
            int outsize = str->bufused + str->bufused / 8 + 256;
107
            int outsize = str->bufused + str->bufused / 8 + 256;
104
            str->buffer = (char*)realloc(str->buffer, str->bufused);
108
            str->buffer = (char*)realloc(str->buffer, str->bufused);
105
            char* buffer = (char*)malloc(outsize);
109
            char* buffer = (char*)malloc(outsize);
106
            int r = ucl_nrv2e_99_compress(str->buffer, str->bufused, buffer, &outsize, 0, 10, NULL, NULL);
110
            int r = ucl_nrv2e_99_compress(str->buffer, str->bufused, buffer, &outsize, 0, 10, NULL, NULL);
107
            free(str->buffer);
111
            free(str->buffer);
108
            if (r != UCL_E_OK)
112
            if (r != UCL_E_OK)
109
            {
113
            {
110
                free(buffer);
114
                free(buffer);
111
                /* this should NEVER happen */
115
                /* this should NEVER happen */
112
                printf("internal error - compression failed: %d\n", r);
116
                printf("internal error - compression failed: %d\n", r);
113
                return 2;
117
                return 2;
114
            }
118
            }
115
            buffer = (char*)realloc(buffer, outsize);
119
            buffer = (char*)realloc(buffer, outsize);
116
            int done = 0;
120
            int done = 0;
117
            while (done < outsize)
121
            while (done < outsize)
118
            {
122
            {
119
                int bytes = fwrite(&buffer[done], 1, outsize - done, str->filep);
123
                int bytes = fwrite(&buffer[done], 1, outsize - done, str->filep);
120
                if (bytes <= 0) return 3;
124
                if (bytes <= 0) return 3;
121
                done += bytes;
125
                done += bytes;
122
            }
126
            }
123
            free(buffer);
127
            free(buffer);
124
		    return fclose(str->filep);
128
		    return fclose(str->filep);
125
        }
129
        }
126
//		return gzclose(str->u.gzfilep);
130
//		return gzclose(str->u.gzfilep);
127
 
131