1127
1145
png_set_read_status_fn(png_ptr, read_row_callback);
1129
.SS Width and height limits
1131
The PNG specification allows the width and height of an image to be as
1132
large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
1133
Since very few applications really need to process such large images,
1134
we have imposed an arbitrary 1-million limit on rows and columns.
1135
Larger images will be rejected immediately with a png_error() call. If
1136
you wish to override this limit, you can use
1138
png_set_user_limits(png_ptr, width_max, height_max);
1140
to set your own limits, or use width_max = height_max = 0x7fffffffL
1141
to allow all valid dimensions (libpng may reject some very large images
1142
anyway because of potential buffer overflow conditions).
1144
You should put this statement after you create the PNG structure and
1145
before calling png_read_info(), png_read_png(), or png_process_data().
1146
If you need to retrieve the limits that are being applied, use
1148
width_max = png_get_user_width_max(png_ptr);
1149
height_max = png_get_user_height_max(png_ptr);
1151
1147
.SS Unknown-chunk handling
1153
1149
Now you get to set the way the library processes unknown chunks in the
1154
1150
input PNG stream. Both known and unknown chunks will be read. Normal
1155
1151
behavior is that known chunks will be parsed into information in
1156
various info_ptr members; unknown chunks will be discarded. To change
1152
various info_ptr members while unknown chunks will be discarded. This
1153
behavior can be wasteful if your application will never use some known
1154
chunk types. To change this, you can call:
1159
1156
png_set_keep_unknown_chunks(png_ptr, keep,
1160
1157
chunk_list, num_chunks);
1161
keep - 0: do not handle as unknown
1158
keep - 0: default unknown chunk handling
1159
1: ignore; do not keep
1163
1160
2: keep only if safe-to-copy
1164
1161
3: keep even if unsafe-to-copy
1165
1162
You can use these definitions:
1182
1179
take precedence. The IHDR and IEND chunks should not be named in
1183
1180
chunk_list; if they are, libpng will process them normally anyway.
1182
Here is an example of the usage of png_set_keep_unknown_chunks(),
1183
where the private "vpAg" chunk will later be processed by a user chunk
1186
png_byte vpAg[5]={118, 112, 65, 103, (png_byte) '\0'};
1188
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
1189
png_byte unused_chunks[]=
1191
104, 73, 83, 84, (png_byte) '\0', /* hIST */
1192
105, 84, 88, 116, (png_byte) '\0', /* iTXt */
1193
112, 67, 65, 76, (png_byte) '\0', /* pCAL */
1194
115, 67, 65, 76, (png_byte) '\0', /* sCAL */
1195
115, 80, 76, 84, (png_byte) '\0', /* sPLT */
1196
116, 73, 77, 69, (png_byte) '\0', /* tIME */
1202
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
1203
/* ignore all unknown chunks: */
1204
png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
1205
/* except for vpAg: */
1206
png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
1207
/* also ignore unused known chunks: */
1208
png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
1209
(int)sizeof(unused_chunks)/5);
1214
The PNG specification allows the width and height of an image to be as
1215
large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
1216
Since very few applications really need to process such large images,
1217
we have imposed an arbitrary 1-million limit on rows and columns.
1218
Larger images will be rejected immediately with a png_error() call. If
1219
you wish to override this limit, you can use
1221
png_set_user_limits(png_ptr, width_max, height_max);
1223
to set your own limits, or use width_max = height_max = 0x7fffffffL
1224
to allow all valid dimensions (libpng may reject some very large images
1225
anyway because of potential buffer overflow conditions).
1227
You should put this statement after you create the PNG structure and
1228
before calling png_read_info(), png_read_png(), or png_process_data().
1229
If you need to retrieve the limits that are being applied, use
1231
width_max = png_get_user_width_max(png_ptr);
1232
height_max = png_get_user_height_max(png_ptr);
1234
The PNG specification sets no limit on the number of ancillary chunks
1235
allowed in a PNG datastream. You can impose a limit on the total number
1236
of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
1238
png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
1240
where 0x7fffffffL means unlimited. You can retrieve this limit with
1242
chunk_cache_max = png_get_chunk_cache_max(png_ptr);
1244
This limit also applies to the number of buffers that can be allocated
1245
by png_decompress_chunk() while decompressing iTXt, zTXt, and iCCP chunks.
1185
1247
.SS The high-level read interface
1187
1249
At this point there are two ways to proceed; through the high-level
1316
1382
interlace_type - (PNG_INTERLACE_NONE or
1317
1383
PNG_INTERLACE_ADAM7)
1318
Any or all of interlace_type, compression_type, of
1385
Any or all of interlace_type, compression_type, or
1319
1386
filter_method can be NULL if you are
1320
1387
not interested in their values.
1389
Note that png_get_IHDR() returns 32-bit data into
1390
the application's width and height variables.
1391
This is an unsafe situation if these are 16-bit
1392
variables. In such situations, the
1393
png_get_image_width() and png_get_image_height()
1394
functions described below are safer.
1396
width = png_get_image_width(png_ptr,
1398
height = png_get_image_height(png_ptr,
1400
bit_depth = png_get_bit_depth(png_ptr,
1402
color_type = png_get_color_type(png_ptr,
1404
filter_method = png_get_filter_type(png_ptr,
1406
compression_type = png_get_compression_type(png_ptr,
1408
interlace_type = png_get_interlace_type(png_ptr,
1322
1411
channels = png_get_channels(png_ptr, info_ptr);
1323
1412
channels - number of channels of info for the
1324
1413
color type (valid values are 1 (GRAY,
1338
1427
be in signature[4] through signature[7]
1339
1428
(see png_set_sig_bytes())).
1342
width = png_get_image_width(png_ptr,
1344
height = png_get_image_height(png_ptr,
1346
bit_depth = png_get_bit_depth(png_ptr,
1348
color_type = png_get_color_type(png_ptr,
1350
filter_method = png_get_filter_type(png_ptr,
1352
compression_type = png_get_compression_type(png_ptr,
1354
interlace_type = png_get_interlace_type(png_ptr,
1358
1430
These are also important, but their validity depends on whether the chunk
1359
1431
has been read. The png_get_valid(png_ptr, info_ptr, PNG_INFO_<chunk>) and
1360
1432
png_get_<chunk>(png_ptr, info_ptr, ...) functions return non-zero if the
1361
1433
data has been read, or zero if it is missing. The parameters to the
1362
png_get_<chunk> are set directly if they are simple data types, or a pointer
1363
into the info_ptr is returned for any complex types.
1434
png_get_<chunk> are set directly if they are simple data types, or a
1435
pointer into the info_ptr is returned for any complex types.
1365
1437
png_get_PLTE(png_ptr, info_ptr, &palette,
1623
1699
As of libpng version 1.2.9, png_set_expand_gray_1_2_4_to_8() was
1624
1700
added. It expands the sample depth without changing tRNS to alpha.
1625
At the same time, png_set_gray_1_2_4_to_8() was deprecated, and it
1626
will be removed from a future version.
1702
As of libpng version 1.2.41, not all possible expansions are supported.
1704
In the following table, the 01 means grayscale with depth<8, 31 means
1705
indexed with depth<8, other numerals represent the color type, "T" means
1706
the tRNS chunk is present, A means an alpha channel is present, and O
1707
means tRNS or alpha is present but all pixels in the image are opaque.
1709
FROM 01 31 0 0T 0O 2 2T 2O 3 3T 3O 4A 4O 6A 6O
1728
"-" means the transformation is not supported.
1729
"X" means the transformation is obtained by png_set_expand().
1730
"1" means the transformation is obtained by
1731
png_set_expand_gray_1_2_4_to_8
1732
"G" means the transformation is obtained by
1733
png_set_gray_to_rgb().
1734
"P" means the transformation is obtained by
1735
png_set_expand_palette_to_rgb().
1736
"T" means the transformation is obtained by
1737
png_set_tRNS_to_alpha().
1628
1739
PNG can have files with 16 bits per channel. If you only can handle
1629
1740
8 bits per channel, this will strip the pixels down to 8 bit.
3116
3253
This function may be safely called when the relevant storage has
3117
3254
already been freed, or has not yet been allocated, or was allocated
3118
by the user and not by libpng, and will in those
3119
cases do nothing. The "seq" parameter is ignored if only one item
3120
of the selected data type, such as PLTE, is allowed. If "seq" is not
3121
-1, and multiple items are allowed for the data type identified in
3122
the mask, such as text or sPLT, only the n'th item in the structure
3123
is freed, where n is "seq".
3255
by the user and not by libpng, and will in those cases do nothing.
3256
The "seq" parameter is ignored if only one item of the selected data
3257
type, such as PLTE, is allowed. If "seq" is not -1, and multiple items
3258
are allowed for the data type identified in the mask, such as text or
3259
sPLT, only the n'th item in the structure is freed, where n is "seq".
3125
If you allocated data such as a palette that you passed
3126
in to libpng with png_set_*, you must not free it until just before the call to
3261
If you allocated data such as a palette that you passed in to libpng
3262
with png_set_*, you must not free it until just before the call to
3127
3263
png_destroy_write_struct().
3129
3265
The default behavior is only to free data that was allocated internally
3189
3325
in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
3190
3326
these functions, call the appropriate png_set_*_fn() function.
3192
Memory allocation is done through the functions png_malloc()
3193
and png_free(). These currently just call the standard C functions. If
3194
your pointers can't access more then 64K at a time, you will want to set
3195
MAXSEG_64K in zlib.h. Since it is unlikely that the method of handling
3196
memory allocation on a platform will change between applications, these
3197
functions must be modified in the library at compile time. If you prefer
3198
to use a different method of allocating and freeing data, you can use
3199
png_create_read_struct_2() or png_create_write_struct_2() to register
3200
your own functions as described above.
3201
These functions also provide a void pointer that can be retrieved via
3328
Memory allocation is done through the functions png_malloc(), png_calloc(),
3329
and png_free(). These currently just call the standard C functions.
3330
png_calloc() calls png_malloc() and then png_memset() to clear the newly
3331
allocated memory to zero. If your pointers can't access more then 64K
3332
at a time, you will want to set MAXSEG_64K in zlib.h. Since it is
3333
unlikely that the method of handling memory allocation on a platform
3334
will change between applications, these functions must be modified in
3335
the library at compile time. If you prefer to use a different method
3336
of allocating and freeing data, you can use png_create_read_struct_2() or
3337
png_create_write_struct_2() to register your own functions as described
3338
above. These functions also provide a void pointer that can be retrieved
3203
3341
mem_ptr=png_get_mem_ptr(png_ptr);
3296
3443
chunk and existing `intrinsic' chunks.
3298
3445
If you need to write a new intrinsic chunk, first read the PNG
3299
specification. Acquire a first level of
3300
understanding of how it works. Pay particular attention to the
3301
sections that describe chunk names, and look at how other chunks were
3302
designed, so you can do things similarly. Second, check out the
3303
sections of libpng that read and write chunks. Try to find a chunk
3304
that is similar to yours and use it as a template. More details can
3305
be found in the comments inside the code. It is best to handle unknown
3306
chunks in a generic method, via callback functions, instead of by
3307
modifying libpng functions.
3446
specification. Acquire a first level of understanding of how it works.
3447
Pay particular attention to the sections that describe chunk names,
3448
and look at how other chunks were designed, so you can do things
3449
similarly. Second, check out the sections of libpng that read and
3450
write chunks. Try to find a chunk that is similar to yours and use
3451
it as a template. More details can be found in the comments inside
3452
the code. It is best to handle unknown chunks in a generic method,
3453
via callback functions, instead of by modifying libpng functions.
3309
3455
If you wish to write your own transformation for the data, look through
3310
3456
the part of the code that does the transformations, and check out some of
3616
3763
png_uint_32 application_vn = PNG_LIBPNG_VER;
3618
.SH IX. Y2K Compliance in libpng
3765
.SH VIII. Changes to Libpng from version 1.0.x to 1.2.x
3767
Support for user memory management was enabled by default. To
3768
accomplish this, the functions png_create_read_struct_2(),
3769
png_create_write_struct_2(), png_set_mem_fn(), png_get_mem_ptr(),
3770
png_malloc_default(), and png_free_default() were added.
3772
Support for the iTXt chunk has been enabled by default as of
3775
Support for certain MNG features was enabled.
3777
Support for numbered error messages was added. However, we never got
3778
around to actually numbering the error messages. The function
3779
png_set_strip_error_numbers() was added (Note: the prototype for this
3780
function was inadvertently removed from png.h in PNG_NO_ASSEMBLER_CODE
3781
builds of libpng-1.2.15. It was restored in libpng-1.2.36).
3783
The png_malloc_warn() function was added at libpng-1.2.3. This issues
3784
a png_warning and returns NULL instead of aborting when it fails to
3785
acquire the requested memory allocation.
3787
Support for setting user limits on image width and height was enabled
3788
by default. The functions png_set_user_limits(), png_get_user_width_max(),
3789
and png_get_user_height_max() were added at libpng-1.2.6.
3791
The png_set_add_alpha() function was added at libpng-1.2.7.
3793
The function png_set_expand_gray_1_2_4_to_8() was added at libpng-1.2.9.
3794
Unlike png_set_gray_1_2_4_to_8(), the new function does not expand the
3795
tRNS chunk to alpha. The png_set_gray_1_2_4_to_8() function is
3798
A number of macro definitions in support of runtime selection of
3799
assembler code features (especially Intel MMX code support) were
3800
added at libpng-1.2.0:
3802
PNG_ASM_FLAG_MMX_SUPPORT_COMPILED
3803
PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU
3804
PNG_ASM_FLAG_MMX_READ_COMBINE_ROW
3805
PNG_ASM_FLAG_MMX_READ_INTERLACE
3806
PNG_ASM_FLAG_MMX_READ_FILTER_SUB
3807
PNG_ASM_FLAG_MMX_READ_FILTER_UP
3808
PNG_ASM_FLAG_MMX_READ_FILTER_AVG
3809
PNG_ASM_FLAG_MMX_READ_FILTER_PAETH
3810
PNG_ASM_FLAGS_INITIALIZED
3816
We added the following functions in support of runtime
3817
selection of assembler code features:
3819
png_get_mmx_flagmask()
3820
png_set_mmx_thresholds()
3822
png_get_mmx_bitdepth_threshold()
3823
png_get_mmx_rowbytes_threshold()
3826
We replaced all of these functions with simple stubs in libpng-1.2.20,
3827
when the Intel assembler code was removed due to a licensing issue.
3829
These macros are deprecated:
3831
PNG_READ_TRANSFORMS_NOT_SUPPORTED
3832
PNG_PROGRESSIVE_READ_NOT_SUPPORTED
3833
PNG_NO_SEQUENTIAL_READ_SUPPORTED
3834
PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
3835
PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
3836
PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
3838
They have been replaced, respectively, by:
3840
PNG_NO_READ_TRANSFORMS
3841
PNG_NO_PROGRESSIVE_READ
3842
PNG_NO_SEQUENTIAL_READ
3843
PNG_NO_WRITE_TRANSFORMS
3844
PNG_NO_READ_ANCILLARY_CHUNKS
3845
PNG_NO_WRITE_ANCILLARY_CHUNKS
3847
PNG_MAX_UINT was replaced with PNG_UINT_31_MAX. It has been
3848
deprecated since libpng-1.0.16 and libpng-1.2.6.
3851
png_check_sig(sig, num)
3853
!png_sig_cmp(sig, 0, num)
3854
It has been deprecated since libpng-0.90.
3857
png_set_gray_1_2_4_to_8()
3858
which also expands tRNS to alpha was replaced with
3859
png_set_expand_gray_1_2_4_to_8()
3860
which does not. It has been deprecated since libpng-1.0.18 and 1.2.9.
3862
.SH X. Detecting libpng
3864
The png_get_io_ptr() function has been present since libpng-0.88, has never
3865
changed, and is unaffected by conditional compilation macros. It is the
3866
best choice for use in configure scripts for detecting the presence of any
3867
libpng version since 0.88. In an autoconf "configure.in" you could use
3869
AC_CHECK_LIB(png, png_get_io_ptr, ...
3871
.SH XI. Source code repository
3873
Since about February 2009, version 1.2.34, libpng has been under "git" source
3874
control. The git repository was built from old libpng-x.y.z.tar.gz files
3875
going back to version 0.70. You can access the git repository (read only)
3878
git://libpng.git.sourceforge.net/gitroot/libpng
3880
or you can browse it via "gitweb" at
3882
http://libpng.git.sourceforge.net/git/gitweb.cgi?p=libpng
3884
Patches can be sent to glennrp at users.sourceforge.net or to
3885
png-mng-implement at lists.sourceforge.net or you can upload them to
3886
the libpng bug tracker at
3888
http://libpng.sourceforge.net
3890
.SH XII. Coding style
3892
Our coding style is similar to the "Allman" style, with curly
3893
braces on separate lines:
3900
else if (another condition)
3905
The braces can be omitted from simple one-line actions:
3910
We use 3-space indentation, except for continued statements which
3911
are usually indented the same as the first line of the statement
3912
plus four more spaces.
3914
For macro definitions we use 2-space indentation, always leaving the "#"
3915
in the first column.
3917
#ifndef PNG_NO_FEATURE
3918
# ifndef PNG_FEATURE_SUPPORTED
3919
# define PNG_FEATURE_SUPPORTED
3923
Comments appear with the leading "/*" at the same indentation as
3924
the statement that follows the comment:
3926
/* Single-line comment */
3934
Very short comments can be placed at the end of the statement
3935
to which they pertain:
3937
statement; /* comment */
3939
We don't use C++ style ("//") comments. We have, however,
3940
used them in the past in some now-abandoned MMX assembler
3943
Functions and their curly braces are not indented, and
3944
exported functions are marked with PNGAPI:
3946
/* This is a public function that is visible to
3947
* application programers. It does thus-and-so.
3950
png_exported_function(png_ptr, png_info, foo)
3955
The prototypes for all exported functions appear in png.h,
3956
above the comment that says
3958
/* Maintainer: Put new public prototypes here ... */
3960
We mark all non-exported functions with "/* PRIVATE */"":
3963
png_non_exported_function(png_ptr, png_info, foo)
3968
The prototypes for non-exported functions (except for those in
3970
the PNG_INTERNAL section of png.h
3971
above the comment that says
3973
/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
3975
The names of all exported functions and variables begin
3976
with "png_", and all publicly visible C preprocessor
3977
macros begin with "PNG_".
3979
We put a space after each comma and after each semicolon
3980
in "for" statments, and we put spaces before and after each
3981
C binary operator and after "for" or "while". We don't
3982
put a space between a typecast and the expression being
3983
cast, nor do we put one between a function name and the
3984
left parenthesis that follows it:
3986
for (i = 2; i > 0; --i)
3987
y[i] = a(x) + (int)b;
3989
We prefer #ifdef and #ifndef to #if defined() and if !defined()
3990
when there is only one macro being tested.
3992
We do not use the TAB character for indentation in the C sources.
3994
Other rules can be inferred by inspecting the libpng source.
3996
.SH XIII. Y2K Compliance in libpng
3622
4000
Since the PNG Development group is an ad-hoc body, we can't make
3623
4001
an official declaration.
3625
4003
This is your unofficial assurance that libpng from version 0.71 and
3626
upward through 1.2.23 are Y2K compliant. It is my belief that earlier
4004
upward through 1.2.41 are Y2K compliant. It is my belief that earlier
3627
4005
versions were also Y2K compliant.
3629
4007
Libpng only has three year fields. One is a 2-byte unsigned integer that
3834
4212
1.2.23beta01-05 13 10223 12.so.0.23[.0]
3835
4213
1.2.23rc01 13 10223 12.so.0.23[.0]
3836
4214
1.2.23 13 10223 12.so.0.23[.0]
4215
1.2.24beta01-02 13 10224 12.so.0.24[.0]
4216
1.2.24rc01 13 10224 12.so.0.24[.0]
4217
1.2.24 13 10224 12.so.0.24[.0]
4218
1.2.25beta01-06 13 10225 12.so.0.25[.0]
4219
1.2.25rc01-02 13 10225 12.so.0.25[.0]
4220
1.0.31 10 10031 10.so.0.31[.0]
4221
1.2.25 13 10225 12.so.0.25[.0]
4222
1.2.26beta01-06 13 10226 12.so.0.26[.0]
4223
1.2.26rc01 13 10226 12.so.0.26[.0]
4224
1.2.26 13 10226 12.so.0.26[.0]
4225
1.0.32 10 10032 10.so.0.32[.0]
4226
1.2.27beta01-06 13 10227 12.so.0.27[.0]
4227
1.2.27rc01 13 10227 12.so.0.27[.0]
4228
1.0.33 10 10033 10.so.0.33[.0]
4229
1.2.27 13 10227 12.so.0.27[.0]
4230
1.0.34 10 10034 10.so.0.34[.0]
4231
1.2.28 13 10228 12.so.0.28[.0]
4232
1.2.29beta01-03 13 10229 12.so.0.29[.0]
4233
1.2.29rc01 13 10229 12.so.0.29[.0]
4234
1.0.35 10 10035 10.so.0.35[.0]
4235
1.2.29 13 10229 12.so.0.29[.0]
4236
1.0.37 10 10037 10.so.0.37[.0]
4237
1.2.30beta01-04 13 10230 12.so.0.30[.0]
4238
1.0.38rc01-08 10 10038 10.so.0.38[.0]
4239
1.2.30rc01-08 13 10230 12.so.0.30[.0]
4240
1.0.38 10 10038 10.so.0.38[.0]
4241
1.2.30 13 10230 12.so.0.30[.0]
4242
1.0.39rc01-03 10 10039 10.so.0.39[.0]
4243
1.2.31rc01-03 13 10231 12.so.0.31[.0]
4244
1.0.39 10 10039 10.so.0.39[.0]
4245
1.2.31 13 10231 12.so.0.31[.0]
4246
1.2.32beta01-02 13 10232 12.so.0.32[.0]
4247
1.0.40rc01 10 10040 10.so.0.40[.0]
4248
1.2.32rc01 13 10232 12.so.0.32[.0]
4249
1.0.40 10 10040 10.so.0.40[.0]
4250
1.2.32 13 10232 12.so.0.32[.0]
4251
1.2.33beta01-02 13 10233 12.so.0.33[.0]
4252
1.2.33rc01-02 13 10233 12.so.0.33[.0]
4253
1.0.41rc01 10 10041 10.so.0.41[.0]
4254
1.2.33 13 10233 12.so.0.33[.0]
4255
1.0.41 10 10041 10.so.0.41[.0]
4256
1.2.34beta01-07 13 10234 12.so.0.34[.0]
4257
1.0.42rc01 10 10042 10.so.0.42[.0]
4258
1.2.34rc01 13 10234 12.so.0.34[.0]
4259
1.0.42 10 10042 10.so.0.42[.0]
4260
1.2.34 13 10234 12.so.0.34[.0]
4261
1.2.35beta01-03 13 10235 12.so.0.35[.0]
4262
1.0.43rc01-02 10 10043 10.so.0.43[.0]
4263
1.2.35rc01-02 13 10235 12.so.0.35[.0]
4264
1.0.43 10 10043 10.so.0.43[.0]
4265
1.2.35 13 10235 12.so.0.35[.0]
4266
1.2.36beta01-05 13 10236 12.so.0.36[.0]
4267
1.2.36rc01 13 10236 12.so.0.36[.0]
4268
1.0.44 10 10044 10.so.0.44[.0]
4269
1.2.36 13 10236 12.so.0.36[.0]
4270
1.2.37beta01-03 13 10237 12.so.0.37[.0]
4271
1.2.37rc01 13 10237 12.so.0.37[.0]
4272
1.2.37 13 10237 12.so.0.37[.0]
4273
1.2.45 10 10045 12.so.0.45[.0]
4274
1.0.46 10 10046 10.so.0.46[.0]
4275
1.2.38beta01 13 10238 12.so.0.38[.0]
4276
1.2.38rc01-03 13 10238 12.so.0.38[.0]
4277
1.0.47 10 10047 10.so.0.47[.0]
4278
1.2.38 13 10238 12.so.0.38[.0]
4279
1.2.39beta01-05 13 10239 12.so.0.39[.0]
4280
1.2.39rc01 13 10239 12.so.0.39[.0]
4281
1.0.48 10 10048 10.so.0.48[.0]
4282
1.2.39 13 10239 12.so.0.39[.0]
4283
1.2.40beta01 13 10240 12.so.0.40[.0]
4284
1.2.40rc01 13 10240 12.so.0.40[.0]
4285
1.0.49 10 10049 10.so.0.49[.0]
4286
1.2.40 13 10240 12.so.0.40[.0]
4287
1.0.50 10 10050 10.so.0.50[.0]
4288
1.2.41beta01-18 13 10241 12.so.0.41[.0]
4289
1.0.51rc01 10 10051 10.so.0.51[.0]
4290
1.2.41rc01-03 13 10241 12.so.0.41[.0]
4291
1.0.51 10 10051 10.so.0.51[.0]
4292
1.2.41 13 10241 12.so.0.41[.0]
3838
4294
Henceforth the source version will match the shared-library minor
3839
4295
and patch numbers; the shared-library major version number will be